在Struts中使用Tuckey URL Rewrite进行URL Rewrite时需要帮助

时间:2018-06-22 17:18:00

标签: java jsp url java-ee url-rewriting

我使用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>

1 个答案:

答案 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]+)&amp;city=([a-z]+)$</from>
    <to>/world/$1/$2</to>
</outbound-rule>

1:Tuckey文档:http://tuckey.org/urlrewrite/manual/3.0/