我们正在将旧的基于JSP的Web应用程序移动到Spring MVC控制器并使用 urlRewriteFilter (http://tuckey.org/urlrewrite/)进行重定向。
我们需要将带有参数的旧JSP永久重定向到控制器视图:
FROM: /products/product-detail.jsp?productId=666
TO: /product-detail?id=666
这里重要的是使用type="permanent-redirect"
,因为我们需要重定向到SEO友好。
我已经看过许多使用urlRewriteFilter的示例和帖子,所有这些都涉及重写没有参数的普通JSP,例如: some.jsp到/ newurl
到目前为止,只有成就是使用前锋:
<rule>
<name>Product Detail Old</name>
<from>^/products/product-detail.jsp(.*)$</from>
<to type="forward">/product-detail</to>
</rule>
但这当然不会重写URL:
导致:/products/product-detail.jsp?productId=666
我们也试过了这个,但它不起作用:
<rule>
<from>/products/product-detail.jsp?(.+)</from>
<to type="permanent-redirect">/product-detail?$1</to>
</rule>
导致/product-detail?p
是否有人可以帮助构建满足上述标准的规则 urlRewriteFilter?
非常感谢。
答案 0 :(得分:2)
它不会自行重写...正如我在手册中发现的那样<from>
仅使用不带查询字符串的URL字符串。
为了能够使用查询字符串,我们需要添加<urlrewrite use-query-string="true">
之后,它就像一个魅力!
所以最终的规则是:
<urlrewrite use-query-string="true">
<!-- more rules here if needed.... -->
<rule>
<from>^/products/product-detail.jsp\?productId=([0-9])$</from>
<to type="permanent-redirect">/product-detail?id=$1</to>
</rule>
</urlrewrite>
答案 1 :(得分:1)
以下是否有效?
<rule>
<from>/products/product-detail.jsp\?productId=([0-9])</from>
<to type="permanent-redirect">/product-detail?id=$1</to>
</rule>
修改强>
对不起。在问号前面忘记上面的斜线,这是正则表达式中的保留字符,除非你逃避它。
这实际上昨天抓住了我,主要是直接从我们现有的旧mod_rewrite规则中复制。
答案 2 :(得分:1)
有几种方法可以解决这个问题。你可以使用
<urlrewrite use-query-string="true">
虽然这会影响文件中的所有规则。要定位特定规则的查询字符串,请使用条件元素
<condition type="query-string">productId=([0-9])</condition>
然后您可以像这样引用查询字符串
<to type="permanent-redirect">/someUrl?%{query-string}</to>
虽然在您的情况下,您希望更改查询字符串,以便您可能想要引用捕获的正则表达式
<to type="permanent-redirect">/product-detail?id=$1</to>