Tuckey - URL重定向有效但转发不起作用

时间:2015-03-06 02:52:50

标签: java tomcat jetty tuckey-urlrewrite-filter

我有一个简单的tuckey规则将路径转发到另一条路径,如下所示:

<rule>
  <name>foo</name>
  <condition name="user-agent">some condition based on device</condition>
  <from>^/abc/(.*)$</from>
  <to type="forward">/xyz/$1</to>
</rule>

实际上,我在点击/ abc时得到404,但是当我将类型更改为“重定向”时,它可以正常工作。

我定义的规则有什么问题吗?

1 个答案:

答案 0 :(得分:1)

<to type="forward">/xyz</to>

相当于

RequestDispatcher rq = request.getRequestDispatcher("/xyz"); 
rq.forward(request, response);

转发发生在服务器上。 servlet容器只是将相同的请求转发到目标URL,而浏览器不知道这一点。因此,您的前向目标网址应该在相同的上下文中。

所以这意味着,如果/xyz/网址是某个外部网址,而不在您的应用程序上下文中,则无法转发给它 - 而是应该重定向。

也就是说,我认为您的<to>网址是外部的,这就是为什么UrlRewriteFilter不起作用的原因。您可以更改为redirect,也可以确保转发到应用程序上下文中的网址。