如何使用UrlRewriteFilter从带有查询字符串的URL中删除“.jsp”

时间:2011-07-26 02:43:13

标签: url-rewriting

出于某种原因,我需要使用 UrlRewriteFilter 在Spring MVC项目中使用查询字符串从Url中删除“.jsp”。

例如,我想要更改

http://localhost:8080/admin/project.jsp?m_product=GA&m_code1=QULQ2U

http://localhost:8080/admin/project?m_product=GA&m_code1=QULQ2U

我尝试了各种规则,但没有成功。

例如,当我将规则设置为

<rule>
    <from>/admin/project.jsp?(.+)</from>
    <to type="redirect">/admin/project?$1</to>
</rule>

UrlRewriteFilter将更改

admin/project.jsp?m_product=GA&m_code1=QULQ2U

admin/project?p

当我使用以下规则来转义查询字符串

之前的问号时
<rule>
    <from>/admin/project.jsp\?(.+)</from>
    <to type="redirect">/admin/project?$1</to>
</rule>

UrlRewriteFilter不会重写网址。

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

如果您想使用Tuckey url重写过滤器从项目中删除扩展名(.jsp),那么它可能会对您有所帮助。

From
    http://locatohost:8080/urlrewrite/feedback.jsp 
To
    http://locatohost:8080/urlrewrite/feedback
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN" 
"http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">
<urlrewrite>
  <rule>
    <from>^/?([a-z]+)$</from>
    <to>/$1.jsp</to>
  </rule>
</urlrewrite>

如果您想反过来(意味着您想要从页面超链接中删除.jsp),请使用以下规则

  <outbound-rule>
    <from>^/?([a-z]+)(.(jsp|jspx))$</from>
    <to>$1</to>
  </outbound-rule>

这样当你使用

<LI><A href="complaints.htm">Complaints</A></LI>

然后它将在页面中写为

<LI><A href="complaints">Complaints</A></LI>

答案 1 :(得分:2)

感谢您的帮助。

问题解决了!

为了实现目标,我将规则更改为

<rule>
    <from>/admin/project.jsp(.*)</from>
    <to type="forward">/project</to>
</rule>

诀窍是将重定向替换为前进。

答案 2 :(得分:2)

使用OCPsoft Rewrite | URLRewriteFilter,这就像指定一条规则一样简单:

.addRule(Join.path("/admin/project")
             .to("/admin/project.jsp")
             .withInboundCorrection());

这可以处理入站转发,出站HTML替换,还可以从旧的.jsp URL重定向到新的/ admin /项目URL,如果有人要求提供旧URL,或者有旧书签。

自动为您处理查询字符串,因此无需担心正则表达式。

答案 3 :(得分:0)

尝试

<rule>
  <from>/admin/project\.jsp\?(.+)</from>
  <to type="redirect">/admin/project?$1</to>
</rule>

作为一般规则,您应该使用控制器来执行此类任务,并让糟糕的JSP执行它应该执行的操作:查看