我有以下Apache重写规则
<IfModule rewrite_module>
RewriteEngine on
RewriteMap tolowercase int:tolower
RewriteCond $2 [A-Z]
RewriteRule ^(.*)/(.*).html$ $1/${tolowercase:$2}.html [R=301,L]
</IfModule>
改变了这一点:
http://localhost.localdomain.com/FooBarBaz.html
到此:
http://localhost.localdomain.com/foobarbaz.html
我想把它移植到这个tuckey.org URL Rewrite Filter。
我可以使用什么等效规则使URL小写?我对如何形成条件元素特别感兴趣。
这是我对规则的第一次削减,但即使没有条件,它也不起作用:
<rule>
<name>Force URL filenames to lower case</name>
<from>^(.*)/(.*).html$</from>
<to type="permanent-redirect" last="true">$1/${lower:$2}.html</to>
</rule>
答案 0 :(得分:4)
这是我最终解决的问题:
<rule match-type="regex">
<name>Force URL filenames to lower case</name>
<condition type="request-uri" casesensitive="false" operator="notequal">^.*/a4j.*$</condition>
<condition type="request-uri" casesensitive="true">^.*/.*[A-Z].*.html$</condition>
<from>^(.*)/(.*).html$</from>
<to type="permanent-redirect" last="true">$1/${lower:$2}.html</to>
</rule>
第一个条件是阻止规则在A4J AJAX请求上运行。
答案 1 :(得分:1)
肖恩,
您不需要执行此操作的条件(除了AJAX调用的忽略)。更重要的是,条件元素does not have a casesensitive attribute,只有from元素。一旦我意识到这一点,我就可以将规则写成:
<rule match-type="regex">
<note>Force URL to lower case</note>
<from casesensitive="true">^.*[A-Z].*$</from>
<to type="permanent-redirect" last="true">${lower:$0}</to>
</rule>
注意:这适用于整个路径请求(尽管不是查询字符串)。
我偶然发现了你的帖子,因为我给出了一个看起来很像你的网址重写过滤规则不起作用。通过大量的反复试验,我最终发现问题根本不在于正则表达式。它是 匹配但是不区分大小写,所以我得到了无限重定向。