2011-11-29 69 views
2

我使用從tuckey(http://www.tuckey.org/urlrewrite/)的URLRewrite篩選的Java URLrewrite過濾器不能找到匹配

現在我創造了一些規則,但它給了我一個頭痛的情況下。 網址:/組/ 1 /更新應該被重寫爲:/組ID = 1個&行動=更新

我創建這種情況下的正則表達式模式:^/組/([0 -9] +)/(\ w *)$,但過濾器無法重寫。沒有匹配。

在我的TestCase裏面,我通過我所有的模式運行這個URL,只是爲了檢查。我發現這場比賽是我的預期。

assertFalse("/group/1/update".matches("^/group/create$")); 
assertFalse("/group/1/update".matches("^/group/save$")); 
assertFalse("/group/1/update".matches("^/group/([0-9]+)/?$")); 
assertTrue("/group/1/update".matches("^/group/([0-9]+)/(\\w*)$")); 
assertFalse("/group/1/update".matches("^/group/([0-9]+)/(\\w*)\\?(.*)+$")); 

那麼過濾器怎麼會找不到規則?

就包括了一切,這是我的urlrewrite.xml,或它的一部分:

<rule> 
    <from>^/group/create$</from> 
    <to>/group?action=create</to> 
</rule> 
<rule> 
    <from>^/group/save$</from> 
    <to>/group?action=save</to> 
</rule> 
<rule> 
    <from>^/group/([0-9]+)/?$</from> 
    <to>/group?id=$1&amp;action=show</to> 
</rule> 
<rule> 
    <from>^/group/([0-9]+)/(\\w*)$</from> 
    <to>/group?id=$1&amp;action=$2</to> 
</rule> 
<rule> 
    <from>^/group/([0-9]+)/(\\w*)\\?(.*)+$</from> 
    <to>/group?id=$1&amp;action=$2&amp;$3</to> 
</rule> 

再見

阿德里安

回答

1

你應該使用單反斜線\代替雙反斜線\\的。

<rule> 
    <from>^/group/([0-9]+)/(\w*)$</from> 
    <to>/group?id=$1&amp;action=$2</to> 
</rule> 
<rule> 
    <from>^/group/([0-9]+)/(\w*)\?(.*)+$</from> 
    <to>/group?id=$1&amp;action=$2&amp;$3</to> 
</rule> 

在Java代碼中,雙backalsh用於表示單個反斜槓。由於字符串是從外部文件讀取的,因此不需要轉義反斜槓。

+0

感謝一切正在工作;)即使在我所有的歲月之後,也從未想過這件事。 – Adi

+0

@Adi如果你接受答案,我會很高興:D – gigadot