2010-10-12 5 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 обрабатывает все правила по умолчанию. –

-1

правила выполняются в порядке - если она соответствует первому правилу он будет выполнять его, если оно не будет идти к следующему и так далее

поэтому вам необходимо заказать ваши правила по приоритету и должны помочь

Пола

+0

так что вы говорите в текущем порядке, если я пишу что-то, совпадающее с первым правилом, будет выполнено только первое правило? –

+0

im not sure, если вы используете переписывание IIS, mod_rewrite для файла php, .htaccess или 3-й части, но когда правило найдено, поскольку оно работает вниз, тогда список затем будет выполнен, есть способ остановить другие правила выполняются с некоторыми двигателями, но я не уверен, что если вы включили это правило или нет – stack72

+0

Я использую tuckey, если вы с ним знакомы –

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,) соответственно.

Смежные вопросы