2012-11-20 38 views
0

我正面临一些奇怪的问题。执行一个规则(最后一条规则)是在转发之前将URL传递给次要的,这给了我404错误。URLRewriteFilter规则追加到URL 2次

的web.xml内容

<filter> 
    <filter-name>UrlRewriteFilter</filter-name> 
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> 
    <init-param> 
    <param-name>logLevel</param-name> 
    <param-value>DEBUG</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>UrlRewriteFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <!-- FORWARD dispatcher will keep on parsing requests through rule until 
    atleast one rule is applied . It sometime may lead into infinite loop 
    --> 
    <!-- <dispatcher>FORWARD</dispatcher> --> 
</filter-mapping> 

我的规则

<rule> 
    <name>DepreatedUrls</name> 
    <from>(/my/url2|/my/url3)</from> 
    <set type="status">410</set> 
    <to last="true">%{context-path}/error/410.html</to> 
</rule> 

<rule> 
    <name>AllRemainingRequests</name> 
    <note> 
     This rule will block all other requests and return http error 
     404 (not supported) and custom error message . 
    </note> 
    <from>(.*)</from> 
    <set type="status">404</set> 
    <to last="true">/error/410.html</to> 
</rule> 

所有其他规则正在执行的罚款。每条规则都是最后一条规则(last =“true”)。 但是,当最后一条规则被执行时,它会将请求转发到 /error/410.html/error/410.html

我已经删除了大部分规则定义以保持简单。以下是调试日志

Nov 20, 2012 12:31:10 PM org.apache.catalina.core.ApplicationContext log 
INFO: org.tuckey.web.filters.urlrewrite.RuleBase DEBUG: AllRemainingRequests (rule 8) run called with /some-content 
Nov 20, 2012 12:31:10 PM org.apache.catalina.core.ApplicationContext log 
INFO: org.tuckey.web.filters.urlrewrite.RuleBase DEBUG: matched "from" 
Nov 20, 2012 12:31:10 PM org.apache.catalina.core.ApplicationContext log 
INFO: org.tuckey.web.filters.urlrewrite.SetAttribute DEBUG: set Set status null 404 called 
Nov 20, 2012 12:31:10 PM org.apache.catalina.core.ApplicationContext log 
INFO: org.tuckey.web.filters.urlrewrite.SetAttribute DEBUG: setting status 
Nov 20, 2012 12:31:10 PM org.apache.catalina.core.ApplicationContext log 
INFO: org.tuckey.web.filters.urlrewrite.RuleExecutionOutput DEBUG: needs to be forwarded to /error/410.html/error/410.html 
Nov 20, 2012 12:31:10 PM org.apache.catalina.core.ApplicationContext log 
INFO: org.tuckey.web.filters.urlrewrite.UrlRewriter DEBUG: rule is last 

回答

0

随着一些命中和试用,我找到了解决方案。来自“AllRemainingRequests”组件的 令人不安。 当我为AllRemainingRequests提出以下定义时,它工作正常。

<rule> 
    <name>AllRemainingRequests</name> 
    <from>(/.*)</from> 
    <set type="status">404</set> 
    <to last="true">/error/410.html</to> 
</rule> 

唯一的变化是 “/”