2013-04-23 74 views
0

我的问题是这样的,我有我的urewrite.xml文件中的类似看规则的问题,事实上,第一条规则将起作用,但类似的规则将不会。这里有一个例子:Tomcat Tuckey UrlRewrite来规则问题

<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页面没有出现,只是生成错误日志,指定参数丢失。

我希望有人能帮助我,然后把我所有的头发都拉出来。

回答

0

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

使用caret metacharacter两个URL之间区别:

<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> 

逆转为了把更具体的网址第一个将工作以及:

<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> 
+0

我注意到,如果你真的交换单词在.jsp之前结束,那么您可以拥有两个规则,因此Porsche-911_991-3.4_Carrera-Test.jsp可以工作,但认为这并不理想,但单词Test仅用于测试目的。我会考虑使用脱字符元字符,谢谢。 – iggyweb 2013-08-20 07:55:29

+0

由于英文从左至右读取,Carrera-Test.jsp不是Carrera.jsp的子字符串,但保时捷是Test-Porsche的子字符串。 [后缀树](http://www.allisons.org/ll/AlgDS/Tree/Suffix/)可以帮助可视化关系。 – 2013-08-20 15:48:04