UrlRewriteFilter匹配多个规则?

时间:2011-06-28 06:44:51

标签: java url-rewriting

我有一条规则可以正常运作:

<rule>
    <from>^/(about|account|admin|cpanel)(\?.*)?$</from>
    <to last="true">/faces/pages/$1/$1.xhtml$2</to>
</rule>

当我在之后添加以下规则时,我在加载与第一条规则匹配的页面时会收到javax.servlet.ServletException: PWC1232: Exceeded maximum depth for nested request dispatches: 20异常。

<rule>
    <from>^/([^\?]+?)/([^\?]+?)(\?.*)?$</from>
    <to last="true">/faces/pages/$1/$2.xhtml$3</to>
</rule>

根据documentation,一旦第一条规则匹配,就不应再处理规则,因为我指定了last="true"。知道我在这里可能缺少什么吗?

1 个答案:

答案 0 :(得分:5)

在web.xml中,我更改了此内容(显示在UrlRewriteFilter文档中)

<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

到这个

<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

它开始表现得很好。这很奇怪,但它确实有效。

似乎没有重新发明轮子的价格花费了95%的开发时间来处理第三个错误。 (GlassFish是主要罪犯。)