在mod_rewrite规则中转换为小写

时间:2010-05-27 18:09:30

标签: regex apache mod-rewrite url-rewriting

我希望像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:谢谢 BeeIgnacio 对此有所帮助。 另外,这是一个相关的问题: RewriteMap activation

3 个答案:

答案 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]