Apache case Insensitive mod_rewrite for single rule

.htaccessapache-2.4mod-rewriterewrite

I am using mod_rewrite for search engine friendly URLs. I have this line that works great:

RewriteRule ^Pay ./pay.php [L] #Pay

but I would like to also have a match if a visitor types http://example.com/pay (note the lowercase). I have tried using NC but I get a 500 error. I have tried making 2 separate rules one uppercase and one lowercase, but again 500 error.

Can this be done on one line using a regular expression? Something like:

RewriteRule ^([P-p])ay ./pay.php [L] #Pay

If so what is the proper way? If not how could I accomplish this without using mod_spelling?

Best Answer

RewriteRule ^Pay ./pay.php [L] #Pay

You get a 500 error because of an endless rewrite loop. If you simply make the above case-insensitive then the rewritten URL ie. /pay.php matches the now case-insensitive pattern ^Pay etc. etc.

In this case, you can simply make your pattern more restrictive and match just "pay", not any URL-path that simply starts "pay". For example:

# Pay
RewriteRule ^pay$ pay.php [NC,L]

I've also removed the ./ prefix on the susbstitution, this is not required. Also, Apache does not support line-end comments.

Be aware, however, that in making this rewrite case-insensitive it potentially results in duplicate content.