繁体   English   中英

UrlRewriteFilter-组合重定向和转发规则

[英]UrlRewriteFilter - combining redirect and forward rules

我正在尝试驯服urlrewritefilter,这看起来像当一个带有重定向的规则与另一个带有转发的规则匹配时,我不会如预期那样在地址栏中看到要重定向的URL。

这是config的一个片段:

<rule>
  <from>/patha</from>
  <to type="redirect">/pathb</to>
</rule>

<rule>
  <from>/pathb</from>
  <to type="forward">/pathc</to>
</rule>

我在尝试访问patha时希望通过此规则完成的patha

  • patha规则将我的浏览器重定向到pathb ,地址栏中的URL 正在更改
  • 由于此规则不是最后一条规则,因此pathb的规则也很匹配,因此浏览器将转发至path​​c,但是由于此规则是转发的,因此地址栏中的URL 仍为pathb

但是实际上发生的是,我在不更改地址栏的情况下转发到pathc。

我的问题是:为什么会这样,我如何才能真正实现自己想要的?

UPD:我已经通过以下方式在jsp中使用重定向对urlrewritefilter进行了向前测试:

response.setStatus(302);
response.setHeader("Location", "pathb");
response.setHeader("Connection", "close");

结果是相同的-不重写URL。

您注意到的是预期的行为。 forward您将永远不会在浏览器中看到该URL。 请查看以下forwardredirect之间的区别:

向前

  • 向前在servlet内部执行,浏览器完全不知道它已经发生,因此它的原始URL
  • 保持不变,任何浏览器重新加载结果页面都会简单地重复原始请求,并带有原始URL

重定向

  • 重定向是一个分为两个步骤的过程,其中Web应用程序指示浏览器获取第二个URL,这不同于原始URL,浏览器重新加载第二个URL不会重复原始请求,而是取回第二个URL。
  • 重定向比转发慢一点,因为它需要两个浏览器请求,第二个请求中没有一个放置在原始请求范围内的对象不可用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM