我已在 中部署了一个 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/
我错过了什么?
答案1
以全新的眼光看待这个问题之后,我发现to
跨上下文转发的规则设置不正确。
将其设置为
<to type="forward" qsappend="true" context="appname">/$1?delay=1</to>
并且它正常工作!太棒了!