Фильтр java urlrewrite не может найти совпадения

StackOverflow https://stackoverflow.com/questions/8318130

  •  25-10-2019
  •  | 
  •  

Вопрос

Я использую фильтр urlrewrite из Туки ( http://www.tuckey.org/urlrewrite/ )

Теперь я создал несколько правил, но есть один случай, который вызывает у меня головные боли. URL: /группа/1/обновление должно быть переписано как: /group? id = 1 & action = обновление

Для этого случая я создал шаблон режима: ^/group/([0-9]+)/( w*) $, но фильтр не может переписать его. Там нет совпадения.

Внутри моего Testcase я запустил этот URL по всем своим узорам, просто чтобы проверить. И я нашел матч, как я ожидал.

assertFalse( "/group/1/update".matches("^/group/create$") );
assertFalse( "/group/1/update".matches("^/group/save$") );
assertFalse( "/group/1/update".matches("^/group/([0-9]+)/?$") );
assertTrue( "/group/1/update".matches("^/group/([0-9]+)/(\\w*)$") );
assertFalse( "/group/1/update".matches("^/group/([0-9]+)/(\\w*)\\?(.*)+$") );

Так почему же фильтр не может найти правило?

Просто чтобы включить все, вот мой urlrewrite.xml или часть этого:

<rule>
    <from>^/group/create$</from>
    <to>/group?action=create</to>
</rule>
<rule>
    <from>^/group/save$</from>
    <to>/group?action=save</to>
</rule>
<rule>
    <from>^/group/([0-9]+)/?$</from>
    <to>/group?id=$1&amp;action=show</to>
</rule>
<rule>
    <from>^/group/([0-9]+)/(\\w*)$</from>
    <to>/group?id=$1&amp;action=$2</to>
</rule>
<rule>
   <from>^/group/([0-9]+)/(\\w*)\\?(.*)+$</from>
    <to>/group?id=$1&amp;action=$2&amp;$3</to>
</rule>

до свидания

Адриан

Это было полезно?

Решение

Вы должны использовать Single Backslash \ Вместо двойной обратной связи \\.

<rule>
    <from>^/group/([0-9]+)/(\w*)$</from>
    <to>/group?id=$1&amp;action=$2</to>
</rule>
<rule>
    <from>^/group/([0-9]+)/(\w*)\?(.*)+$</from>
    <to>/group?id=$1&amp;action=$2&amp;$3</to>
</rule>

В коде Java Double Backalsh используется для представления одной Backslash. Поскольку строка считывается из внешнего файла, нет необходимости выхода из -за бэкзота.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top