如何将此Apache重写规则转换为Tuckey UrlRewriteFilter规则?

时间:2010-09-09 15:45:55

标签: java apache mod-rewrite url-rewriting tuckey-urlrewrite-filter

我有以下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>

2 个答案:

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

注意:这适用于整个路径请求(尽管不是查询字符串)。

我偶然发现了你的帖子,因为我给出了一个看起来很像你的网址重写过滤规则不起作用。通过大量的反复试验,我最终发现问题根本不在于正则表达式。它是 匹配但是区分大小写,所以我得到了无限重定向。