URLRewriteFilter&一些规则后打破

时间:2010-10-12 12:47:23

标签: url-rewriting

所有的问候 我有一些非常相似的规则

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

并且我希望当第一条规则发生完全匹配时,它只会被执行而其他规则不会像编程中断一样,任何想法如何执行?

3 个答案:

答案 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)

规则按顺序执行 - 如果它匹配第一个规则它将执行它,如果它没有它将转到下一个等等

因此,您需要按优先顺序订购规则,这应该有帮助