【问题标题】:Tomcat Tuckey UrlRewrite to rule issueTomcat Tuckey UrlRewrite 到规则问题
【发布时间】:2016-12-13 23:43:47
【问题描述】:

我的问题是,我的 urewrite.xml 文件中的类似规则存在问题,事实上第一条规则会起作用,但随后的类似规则不会。这是一个例子:

<rule>
<from>Porsche-911_991-3.4_Carrera.jsp</from>
<to>cars.jsp?makeID=640&amp;modelID=3747</to>
</rule>

<rule>
<from>Test-Porsche-911_991-3.4_Carrera.jsp</from>
<to>test.jsp?makeID=640&amp;modelID=3747</to>
</rule>

第一条规则有效,第二条无效,我不知道为什么。如果我手动访问 test.jsp?makeID=640&modelID=3747 页面可以工作,如果我尝试 Test-Porsche-911_991-3.4_Carrera.jsp 页面不会出现,只会生成错误日志指定参数丢失。

我希望在我拔掉所有头发之前有人可以帮助我。

【问题讨论】:

    标签: java xml tomcat url-rewriting tuckey-urlrewrite-filter


    【解决方案1】:

    第一条规则的匹配文本Porsche-911_991-3.4_Carrera.jsp是第二条规则匹配文本的子串。结果,第二个 URL 消失了。

    使用caret metacharacter 区分两个网址:

    <rule>
      <from>^/Porsche-911_991-3.4_Carrera.jsp</from>
      <to>cars.jsp?makeID=640&amp;modelID=3747</to>
    </rule>
    
    <rule>
      <from>^/Test-Porsche-911_991-3.4_Carrera.jsp</from>
      <to>test.jsp?makeID=640&amp;modelID=3747</to>
    </rule>
    

    颠倒顺序以将更具体的 URL 放在首位也可以:

    <rule>
      <from>Test-Porsche-911_991-3.4_Carrera.jsp</from>
      <to>test.jsp?makeID=640&amp;modelID=3747</to>
    </rule>
    
    <rule>
      <from>Porsche-911_991-3.4_Carrera.jsp</from>
      <to>cars.jsp?makeID=640&amp;modelID=3747</to>
    </rule>
    

    【讨论】:

    • 我注意到,如果您实际上将单词交换到 .jsp 之前的末尾,那么您可以同时拥有这两个规则,因此 Porsche-911_991-3.4_Carrera-Test.jsp 有效,当然这并不理想但测试一词仅用于测试目的。我将研究插入符号元字符的使用,谢谢。
    • 由于英语是从左到右读取的,所以 Carrera-Test.jsp 不是 Carrera.jsp 的子串,而 Porsche 是 Test-Porsche 的子串。 suffix tree 可能有助于可视化这种关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 2011-06-29
    • 2019-04-10
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多