如何使用urlRewriteFilter永久地使用参数重定向JSP?

时间:2013-03-28 09:52:50

标签: java redirect spring-mvc url-rewriting tuckey-urlrewrite-filter

我们正在将旧的基于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?

非常感谢。

3 个答案:

答案 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>