Reputation: 26952
I would like URLs like server.com/foo to be case-insensitive. But server.com/foo actually gets mod_rewrite'd to server.com/somedir/foo
(Assume that all the files in "somedir" are lower case.)
So the question is, how to accomplish a mod_rewrite like the following:
RewriteRule ^([^/]+)/?$ somedir/convert_to_lowercase($1)
PS: Here's a handy mod_rewrite cheat sheet -- http://dreev.es/modrewrite -- though it fails to answer this particular question.
PPS: Thanks to Bee and Ignacio for all the help with this. Also, here's a related question: RewriteMap activation
Upvotes: 16
Views: 24668
Reputation: 31
I would make it a 301 redirect, NOT a URL rewrite, for SEO purposes:
RewriteMap tolower int:tolower
RewriteRule ^([^/]+)/?$ somedir/${tolower:$1} [R=301,L]
Upvotes: 3
Reputation: 26952
First, put the following line in the <VirtualHost>
section of your .conf file.
(For me that lives at /etc/httpd/vhosts.d/00foo.conf
.)
RewriteMap lc int:tolower
You can replace lc
with any name you want.
Then restart apache, which you can do with sudo service httpd restart
.
Finally, add this in your .htaccess file:
RewriteRule ^/(.*)$ /${lc:$1}
Upvotes: 21
Reputation: 799014
RewriteMap tolower int:tolower
RewriteRule ^([^/]+)/?$ somedir/${tolower:$1}
Upvotes: 14