2010-10-12 72 views
1

問候畢竟 我有一些規則,這是非常相似的URLRewriteFilter&打破一些規則

<rule> 
    <from>/a/**/b/**/c/**/d</from> 
    <to>/somePlace</to> 
</rule> 

    <rule> 
    <from>/a/**/b/**/c</from> 
    <to>/anotherPlace1</to> 
</rule> 

    <rule> 
    <from>/a/**/b</from> 
    <to>/anotherPlace2</to> 
</rule> 

,當精確匹配出現的第一條規則,我想,這只是執行和其他規則都沒有,像編程中的突破,任何想法該怎麼做?

回答

4

您是否嘗試過改變第一規則指令:

<to last="true">/somePlace</to> 
+0

這應該是被接受的答案!上面的答案不解決問題,UrlRewriteFilter默認處理所有規則。 – 2011-06-28 06:25:59

-1

規則按順序執行 - 如果它的第一條規則相匹配,將執行它,如果它不將進入下一等

因此你需要優先訂購你的規則和應幫助

保羅

+0

所以你說的是按照當前的順序,如果我寫了一些匹配第一條規則的東西,只有第一條規則會被執行? – 2010-10-12 13:23:51

+0

即時通訊不知道如果你正在使用IIS重寫,mod_rewrite的PHP,.htaccess文件或第三部分,但當一個規則被發現,因爲它的方式下來然後列表然後它會被執行,有一種方法來阻止其他規則與某些引擎執行,但我不知道如果你有這個規則打開或沒有 – stack72 2010-10-12 13:26:45

+0

我使用塔克,如果你熟悉它 – 2010-10-12 13:28:56

1

如果您正在使用OCPsoft Rewrite URLRewriteFilter,你可以實現使用生命週期控制同樣的事情:如果我們要停止處理規則

.defineRule() 
    .when(Direction.isInbound().and(Path.matches("/some/{page}/"))) 
    .perform(Forward.to("/new-{page}/")); 

,我們可以標記生命週期的「處理」,並沒有進一步的規則將被處理。

.defineRule() 
    .when(Direction.isInbound().and(Path.matches("/other/{page}/"))) 
    .perform(Lifecycle.handled()); 

隨後,我們也可以使用Lifecycle.proceed()Lifecycle.abort()控制繼續即使先前標記的處理(在相同的規則)的處理或完全終止請求分別(中止整個HttpServletRequest的,)。