我希望像server.com/foo这样的网址不区分大小写。 但是server.com/foo实际上将mod_rewrite'd发送到server.com/somedir/foo
(假设“somedir”中的所有文件都是小写的。)
所以问题是,如何完成如下的mod_rewrite:
RewriteRule ^([^/]+)/?$ somedir/convert_to_lowercase($1)
PS:这是一个方便的mod_rewrite备忘单 - http://dreev.es/modrewrite - 虽然它无法回答这个特定的问题。
PPS:谢谢 Bee 和 Ignacio 对此有所帮助。 另外,这是一个相关的问题: RewriteMap activation答案 0 :(得分:16)
首先,将以下行放在.conf文件的<VirtualHost>
部分中。
(对我来说,住在/etc/httpd/vhosts.d/00foo.conf
。)
RewriteMap lc int:tolower
您可以将lc
替换为您想要的任何名称。
然后重启apache,您可以使用sudo service httpd restart
。
最后,在.htaccess文件中添加:
RewriteRule ^/(.*)$ /${lc:$1}
答案 1 :(得分:12)
RewriteMap tolower int:tolower
RewriteRule ^([^/]+)/?$ somedir/${tolower:$1}
答案 2 :(得分:2)
为了搜索引擎优化,我会将它改为301重定向,而不是URL重写:
RewriteMap tolower int:tolower
RewriteRule ^([^/]+)/?$ somedir/${tolower:$1} [R=301,L]