Fixing an odd bug in .htaccess

I don't know if this is relevant to anyone else, but I've been experiencing issues with some of my sites where I get a 500 (server configuration) error. Something like this:

is fine, but going to this:

would throw a 500 error. I think I finally figured out why, and I thought some of you might benefit as well.

See, I have this line in my .htaccess file:

RewriteRule ^(.*)$ $1.php

I think what is happening is that Apache is merrily doing what I've asked it to do: add .php to the end of the url. So my first example becomes:

which I want, but then it is also doing this (I think):

which is obviously invalid. So, to fix it, I added this rule before that rule:

RewriteRule ^(.*)/$ $1.php [L]

And et viola! No more 500 errors. May just be coincidence, and if someone reads this and knows better, let me know. For now, though, I am happy to let it stand.

Hope this helps!

[EDIT:] I think the real fix here was the [L] flag. That flag tells Apache to stop processing my htaccess file. That prevents the rewrite engine from trying to add a .php to a directory.

This also seems to have the added bonus of keeping people from snooping in my various directories, since my htaccess file makes each directory look like a file to Apache. So if someone tries to peek into, say, the /images/ directory, they get a 404 error instead, since I do not have a file called 'images.php'.


Older Newer