我部署了一个 Web 应用程序webapps/appname
,我正在尝试添加重写规则example.org/appname-slow
以重写为example.org/appname?delay=1
. 我有以下内容webapps/ROOT/WEB-INF/web.xml
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>confReloadCheckInterval</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>statusEnabledOnHosts</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>logLevel</param-name>
<param-value>sysout:DEBUG</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
和以下内容webapps/ROOT/WEB-INF/urlrewrite.xml
:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
"http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">
<urlrewrite use-context="true">
<rule match-type="regex">
<from>^/appname-slow/(.*)$</from>
<to type="forward" qsappend="true">/appname/$1?delay=1</to>
</rule>
</urlrewrite>
但是当我转到新网址时,我得到:
HTTP Status 404 - /appname/
type Status report
message /appname/
description The requested resource is not available.
并直接/appname/
按预期工作。
在context.xml
我有
<Context crossContext="true">
这是catalina.out
日志输出
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter DEBUG: starting conf reload check
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter DEBUG: conf is not modified
org.tuckey.web.filters.urlrewrite.utils.ServerNameMatcher DEBUG: looking for hostname match on current server name test.example.org
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter DEBUG: checking for status path on /appname-slow/
org.tuckey.web.filters.urlrewrite.UrlRewriter DEBUG: processing request for /appname-slow/
org.tuckey.web.filters.urlrewrite.RuleBase DEBUG: Rule 0 run called with /appname-slow/
org.tuckey.web.filters.urlrewrite.RuleBase DEBUG: matched "from"
org.tuckey.web.filters.urlrewrite.substitution.MatcherReplacer DEBUG: found 1
org.tuckey.web.filters.urlrewrite.substitution.MatcherReplacer DEBUG: replaced sb is /appname/?delay=1
org.tuckey.web.filters.urlrewrite.RuleExecutionOutput DEBUG: needs to be forwarded to /appname/?delay=1
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter DEBUG: starting conf reload check
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter DEBUG: conf is not modified
org.tuckey.web.filters.urlrewrite.utils.ServerNameMatcher DEBUG: looking for hostname match on current server name test.example.org
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter DEBUG: checking for status path on /appname/
org.tuckey.web.filters.urlrewrite.UrlRewriter DEBUG: processing request for /appname/
org.tuckey.web.filters.urlrewrite.RuleBase DEBUG: Rule 0 run called with /appname/
我错过了什么?
以全新的眼光看待这个问题后,我
to
为跨上下文转发设置了错误的规则。将其设置为
<to type="forward" qsappend="true" context="appname">/$1?delay=1</to>
它工作正常!嘘!