Convert to lowercase in a mod_rewrite rule
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
(A开发者_StackOverflowssume 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
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}
RewriteMap tolower int:tolower
RewriteRule ^([^/]+)/?$ somedir/${tolower:$1}
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]
精彩评论