Java URLrewrite Filter не может найти соответствие

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

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

Я создал шаблон регулярного выражения для этого случая: ^ / 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>

до свидания

Адриан

1 ответ

Решение

Вы должны использовать одну обратную косую черту \ вместо двойной обратной косой черты \\,

<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 двойной обратный слеш используется для представления одного обратного слеша. Поскольку строка читается из внешнего файла, нет необходимости экранировать обратную косую черту.

Другие вопросы по тегам