0

私は奇妙な問題に直面しています。1 つのルール (最後のルール) を実行すると、404 エラーが発生する転送の前に URL が 1 回に設定されます。

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
4

1 に答える 1

0

いくつかのヒットと試行で、解決策を見つけました。AllRemainingRequests の「from」コンポーネントが問題です。AllRemainingRequests に次の定義を入れると、正常に動作します。

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

変更は「/」のみ

于 2012-11-21T13:57:09.553 に答える