我使用struts2框架和mongoDB数据库。现在我有了这个网址:
http://localhost:8084/testURL/pages.jsp?pid=5b2d12a67f7eef1094c6a6de
我想显示此URL
http://localhost:8084/testURL/pages/5b2d12a67f7eef1094c6a6de
。
我正在使用tuckey进行URL重写。以下是我的urlrewrite.xml。返回404未找到
<urlrewrite>
<rule>
<from>^/pages.jsp?pid=$1</from>
<to>/pages/$</to>
</rule>
</urlrewrite>
答案 0 :(得分:0)
免责声明:由于评论的篇幅,假定写作是解决问题的答案
在正则表达式中,^
and $
are reserved character to say begin
and end
。我假设您在URL重写规则中使用与(1)匹配的标准正则表达式
您可能需要capture参数,然后在to
参数中重新使用它:
<urlrewrite>
<rule>
<from>^\/pages\.jsp\?pid=(.*)$</from>
<to>/pages/$1</to>
</rule>
</urlrewrite>
所有反斜杠,因为您需要转义特殊字符:斜杠
/
,点.
和问号?
使用(。*)中的点是过大的,请随时调整正则表达式。下面的例子
如果您确定PID始终由字母数字小写字母组成,则可以使用
<urlrewrite>
<rule>
<from>^\/pages\.jsp\?pid=([a-z0-9]*)$</from>
<to>/pages/$1</to>
</rule>
</urlrewrite>
您可以在这里测试正则表达式:https://regex101.com/
在Tuckey docs (1)中,提到您的情况与<outbound-rule>
一起使用。我还没有把Tucket推得那么远,所以我无法确定在您的情况下使用<rule>
是否足够:
<outbound-rule> <from>^/world.jsp?country=([a-z]+)&city=([a-z]+)$</from> <to>/world/$1/$2</to> </outbound-rule>
1:Tuckey文档:http://tuckey.org/urlrewrite/manual/3.0/