我有一个Web应用程序部署在一个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>
但是当我去到新的url,我得到:
HTTP Status 404 - /appname/ type Status report message /appname/ description The requested resource is not available.
直接进入/appname/按预期工作。
在我有
<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 type="forward" qsappend="true" context="appname">/$1?delay=1</to>
它正常工作! Booya!