出于某种原因,我需要在Spring MVC项目中使用UrlRewriteFilter从带有查询字符串的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不会重写URL。
感谢您的帮助
如果你想使用Tuckey url重写过滤器从项目中删除扩展名(.jsp),那么它可能对你有帮助。
<>以前从http://locatohost:8080/urlrewrite/feedback.jsp来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>
谢谢你的帮助。
问题解决了!
为了达到目的,我将规则改为
<rule>
<from>/admin/project.jsp(.*)</from>
<to type="forward">/project</to>
</rule>
使用OCPsoft Rewrite | URLRewriteFilter,这就像指定一个规则一样简单:
.addRule(Join.path("/admin/project")
.to("/admin/project.jsp")
.withInboundCorrection());
这处理入站转发、出站HTML替换,并且如果有人请求旧URL或有旧书签,也可以从旧的.jsp URL重定向到新的/admin/project URL。
查询字符串将自动为您处理,因此无需担心正则表达式。
Try
<rule>
<from>/admin/project.jsp?(.+)</from>
<to type="redirect">/admin/project?$1</to>
</rule>
作为一般规则,您应该使用控制器来完成这样的任务,让蹩脚的JSP完成它应该做的事情:VIEW