<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>
并且我希望当第一条规则发生完全匹配时,它只会被执行而其他规则不会像编程中断一样,任何想法如何执行?
答案 0 :(得分:4)
您是否尝试将第一条规则更改为指令:
<to last="true">/somePlace</to>
答案 1 :(得分:1)
如果您使用的是OCPsoft Rewrite URLRewriteFilter,则可以使用Lifecycle控件实现同样的目的:
.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)。
答案 2 :(得分:-1)
规则按顺序执行 - 如果它匹配第一个规则它将执行它,如果它没有它将转到下一个等等
因此,您需要按优先顺序订购规则,这应该有帮助
保