使用mod_rewrite,如何强制path和查询string全部小写?

这似乎应该是一件容易的事情,但是对于我来说,我无法弄清楚这一点。

我想强制我的整个url是小写,所以,例如:

http://www.EXAMPLE.com/foo?q=bar http://www.example.com/FOO?q=bar http://www.example.com/foo?Q=BAR http://www.EXAMPLE.com/FOO?Q=BAR 

全部(301)redirect到:

 http://www.example.com/foo?q=bar 

添加:

 RewriteMap lc int:tolower 

到httpd.conf,和:

 RewriteEngine on RewriteCond %{REQUEST_URI} [AZ] RewriteRule (.*) ${lc:$1} [L,R=301] 

.htaccess,我可以使URL的基础部分redirect我想要的方式(上面的前两种情况),但我无法弄清楚如何使查询string的工作。 任何人都可以指导我如何做到这一点?

试试这个规则:

 RewriteCond %{REQUEST_URI} ^[^AZ]*[AZ].* [OR] RewriteCond %{QUERY_STRING} ^[^AZ]*[AZ].* RewriteRule ^ ${lc:%{REQUEST_URI}}?${lc:%{QUERY_STRING}} [L,R=301] 

给这个镜头,我没有测试它:

 RewriteMap lowercase int:tolower RewriteCond $1 [AZ] RewriteRule ^/(.*)$ /${lowercase:$1} [R=301,L]