我有一个简单的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,但是当我将类型更改为“重定向”时,它可以正常工作。
我定义的规则有什么问题吗?
答案 0 :(得分:1)
<to type="forward">/xyz</to>
相当于
RequestDispatcher rq = request.getRequestDispatcher("/xyz");
rq.forward(request, response);
转发发生在服务器上。 servlet容器只是将相同的请求转发到目标URL,而浏览器不知道这一点。因此,您的前向目标网址应该在相同的上下文中。
所以这意味着,如果/xyz/
网址是某个外部网址,而不在您的应用程序上下文中,则无法转发给它 - 而是应该重定向。
也就是说,我认为您的<to>
网址是外部的,这就是为什么UrlRewriteFilter不起作用的原因。您可以更改为redirect
,也可以确保转发到应用程序上下文中的网址。