Tomcat URL Rewrite Filter不转发

时间:2012-07-11 18:02:40

标签: tomcat url-rewriting

我想转发与该模式匹配的所有网址:

http://localhost:8080/docs/view.php?fDocumentId=([0-9]+)

到:

http://localhost:8080/alfresco/service/org/docs/redirect/document/properties/$1

这是在tomcat上,并且正在加载两个主要的webapp:“docs”& “露天”。
为简单起见,我们的旧遗留应用程序(基于LAMP)将所有带有/ docs的URL作为路径的第一部分,与新应用程序相同。我转发到/ alfresco的原因是因为我开发了一个webscript来将旧URL解析为一个新的URL并执行另一个重定向回到/ docs,但这与这个问题无关。

新系统已加载URLRewriteFilter,但缺少以下需要放入webapps / docs / WEB-INF / web的Google代码网站(我已添加)中提及的特定代码。 XML:

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

然后我将以下规则添加到与web.xml相同的目录中的urlrewrite.xml:

<rule>
   <from>^/docs/view.php?fDocumentId=([0-9]+)</from>
   <to>/alfresco/service/org/docs/redirect/document/properties/$1</to>
</rule>

在尝试去http://localhost:8080/docs/view.php?fDocumentId=12345

之类的时候,我得到了404

1 个答案:

答案 0 :(得分:1)

您的<from><to>都不正确。

首先,您的<from>需要相对于已经/docs的当前上下文(即webapp),所以您想要这样:

<from>^/view.php?fDocumentId=([0-9]+)</from>

其次,您的<to>也必须与当前上下文相关,除非您指定context属性,您的上下文被定义为跨上下文。所以,你需要这个:

<to context="/alfresco">/service/gov/inteldocs/redirect/document/properties/$1</to>

您还需要在META-INF/context.xml文件中使用此功能:

<Context ... crossContext="true" ... />

请注意,这两个警告都在http://urlrewritefilter.googlecode.com/svn/trunk/src/doc/manual/4.0/index.html#fromhttp://urlrewritefilter.googlecode.com/svn/trunk/src/doc/manual/4.0/index.html#to的url-rewrite文档中明确说明(包括后者的示例)。