2015-03-06 2 views
1

У меня есть простое правило Таки направить путь на другой путь, который выглядит как:Таки - URL перенаправления работает, но переадресация не

<rule> 
    <name>foo</name> 
    <condition name="user-agent">some condition based on device</condition> 
    <from>^/abc/(.*)$</from> 
    <to type="forward">/xyz/$1</to> 
</rule> 

Как это, я получаю 404 при ударе/азбука, но когда я меняю тип на «перенаправление», он отлично работает.

Есть ли что-то не так с правилом, который я определил?

ответ

1

<to type="forward">/xyz</to>

эквивалентно

RequestDispatcher rq = request.getRequestDispatcher("/xyz"); 
rq.forward(request, response); 

вперед происходит на сервере. Контейнер сервлета просто перенаправляет один и тот же запрос на целевой URL, не зная об этом обозреватель. Поэтому ваш целевой целевой URL должен находиться в том же контексте.

Значит, если /xyz/ URL-адрес - это какой-то внешний URL-адрес, а не в контексте вашего приложения, вы не можете его переадресовать - вместо этого вы должны перенаправить.

Это, я полагаю, что ваш URL-адрес <to> является внешним, поэтому UrlRewriteFilter не работает. Вы можете либо изменить на redirect, либо убедиться, что хотите переслать URL-адрес, который находится в контексте вашего приложения.

+0

Вы говорите о корне? Если да, есть ли для этого конфигурация? Я предполагаю, что это как раз то, что указывает на URL. – JPL

+0

Я поместил там более подробную информацию, пожалуйста, посмотрите. Надеюсь, это поможет. – vtor