2010-10-12 70 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的,)。