Welcome to WebmasterWorld Guest from

Forum Moderators: Ocean10000 & incrediBILL & phranque

Message Too Old, No Replies

Trying to avoid redundancy in htaccess files

Stuck on some basics in core features & modules

2:49 am on Jan 17, 2004 (gmt 0)

Junior Member

10+ Year Member

joined:Oct 23, 2002
votes: 0

Hi all,
I'm trying to find out how to ensure my .htaccess files are written correctly and efficiently. I think I have some redundant directives in different folders but am getting stuck on some areas that I believe are pretty basic - I just can't seem to "get" it; and haven't found answers to what's stumping me. Here's some examples:

Files Directives
1. Can you have more than one directive within the same <Files></Files> section? e.g. can I deny my .htaccess files from everyone and then on the next line deny *.gif files from specific domains? Is something like this allowed?

<Files .htaccess>
order allow,deny
deny from all

order deny,allow
deny from baddomain.net

2.a. I have a couple .htaccess files in different folders which do different things. My primary htaccess file denies access to the htacess file itself. Do I have to repeat this particular <Files> directive in each separate htaccess file or does the top directive protect the htaccess files in lower directories, too?

2.b. Same question about repeating these directives other folders --
-- Options +FollowSymlinks
-- IndexIgnore *
-- RewriteEngine on

Before you refer me to apache.org/docs/ - I've repeatedly read everything I can find on these directives - and don't see answers to these types of questions. Same is true for dozens of tutorial pages I've searched; maybe I'm just not 'seeing' answers that are there. I hope this makes sense? If you have suggestions for more reading material I'll gladly accept it. Thanks in advance for any help!

P.S. I'm on a shared server and don't have access to server config files.

3:16 am on Jan 17, 2004 (gmt 0)

Senior Member

WebmasterWorld Senior Member jdmorgan is a WebmasterWorld Top Contributor of All Time 10+ Year Member

joined:Mar 31, 2002
votes: 0


1) No. You can have more than one directive, but they only apply to the file prefixes given inside the <Files> directive itself - within the <>, that is. <Files> </Files> is the container, and it contains other directives to be applied to all files (regardless of subdirectory path) that match the given pattern.

2a) No. <Files> directives apply to all files which match the given prefix in the current directory and all of its dependent subdirectories.

Note that this <Files> behaviour differs from that of mod_rewrite, which works with URLs. Since mod_rewrite uses URLs, the entire filepath is taken into account. But <FIles> just works with the filesystem, using the name of the file(s), and doesn't care if it is (they are) in the current directory or in a subdirectory, or both.

The transition from working with URLs to working with filepaths is subtle. Most webmasters don't even make the distinction until they begin to work with mod_rewrite. The distinction only becomes obvious when you realize that you can use mod_rewrite to re-map everything so that your filenames and your URLs no longer need to have anything in common. (Not that you should, but you can). Mod_rewrite takes URLs as input and outputs (usually) filepaths. So it exists in both worlds - the URL-world and the filesystem-world. Mod_rewrite can be forced to output URLs instead of filepaths by using the [PT] flag; This is sometimes necessary so that other URL-to-filename converting modules can use mod_rewrite's output before content is served.

2b) Options and IndexIgnore, No (I think). RewriteEngine on, Yes -- needed in each .htaccess file.

There is something there at Apache.org about "inheritance" or something - it's been awhile since I dug through it. The general rule is that configuration directives apply to everyhing in a directory and all of its subdirectories, unless you override the higher-level configuration in the subdirectory. You can also disable this override-ability if needed. RewriteEngine on is not a configuration directive, it's a module-control directive, so it is different. (Hope that's clear) :o


10:12 pm on Jan 17, 2004 (gmt 0)

Junior Member

10+ Year Member

joined:Oct 23, 2002
votes: 0

wow - thank you Jim for such a comprehensive answer - it is most helpful. Your practical answers really hit home - the majority of tutorials I've been finding are too 'academic' in that they don't provide adequate real life examples.

So to sum up (1) - my directive for limiting viewing of htaccess files just needs to be in the top directory <Files> container, and if I want to limit *.gif files I should add a second container.

And thanks for the answer on the 'repetition' (inheritance) of various directives - now I even have a better word to use in my searches (inheritance) - I guess my searches would be more productive if I knew the right words to use. LOL. If you decide to hold an online class I'll be the first to sign up.