Tuckey Urlrewriter изменяет URL-запросы для ресурсов JS и CSS

Я пробую URLRewriter Таки.

Я объявил одно простое правило следующим образом:

<rule>
    <from>/user/([0-9]+)$</from>
    <to>/user.do?id=$1</to>
</rule>

Я ожидаю, что такие запросы, как myapp.com/user/29, будут сопоставлены с «myapp.com/user.do?id=29». Это отлично работает, и запрос поступает на резервную копию. Однако при просмотре ответа в графическом интерфейсе Firebug жалуется на это:

введите здесь описание изображения

Как видите, между /roqket и /resources теперь есть /user. Я понятия не имею, как это там оказалось. Если я удалю <rule>, он вернется к нормальным рабочим запросам ресурсов.

Вы можете помочь мне? Что мне не хватает? Спасибо!


person Ionut    schedule 06.11.2012    source источник


Ответы (2)


Вам нужно определить другие фильтры для js, style и img.

Что-то вроде этого:

<rule>
    <from>/img/**</from>
    <to>/img/$1</to>
</rule>
<rule>
    <from>/js/**</from>
    <to>/js/$1</to>
</rule>
<rule>
    <from>/style/**</from>
    <to>/style/$1</to>
</rule>

Эти фильтры должны быть объявлены перед тем, который вы определяете для пользователя. Эти правила будут совпадать перед теми, которые применяются к фильтру, и ваша проблема должна быть решена.

Изменить.

Относительно вашего комментария: Тот пользователь, которого можно увидеть на экране печати, каким-то образом добавлен фильтром.

Я думаю, что это неправильно, я имею в виду, что фильтр не тот, который добавляет в фильтр «пользователя». Я думаю, проблема в том, как вы импортируете свои ресурсы.

Вероятно, вы делаете что-то вроде этого:

<script type="text/javascript" language="javascript" src="resources/js/lang.js"></script>

В этом примере вы увидите, как относительный URI не содержит контекст вашего приложения и начинается без косой черты. Когда вы используете такой URL-адрес, браузер будет искать ресурс в пути относительно фактического пути. Если в вашем браузере есть http://localhost:8080/roqlet/user, результат будет http://localhost:8080/roqket/user/theResource (при условии, что 'roqket' является контекстом вашего приложения).

Итак, вы должны сделать это:

<c:set var="ctx" value="${pageContext.request.contextPath}"/>

<script type="text/javascript" language="javascript" src="${ctx}/resources/js/lang.js"></script>

Теперь, когда вы указываете контекст, URI будет построен относительно него, а не фактического: http://localhost:8080/roqket/theResource

Взгляните на этот документ.

person jddsantaella    schedule 06.11.2012
comment
Я попробовал ваше решение, но у меня была та же проблема. Я не понимаю, почему эти запросы каким-либо образом сопоставлялись с user. Они не содержали слова user. То user, которое видно на принтскрине, каким-то образом добавляется фильтром - person Ionut; 06.11.2012
comment
Загляните в мои выпуски. Я догадываюсь, в чем твоя проблема. Я надеюсь, что это так ;-) - person jddsantaella; 07.11.2012
comment
Ну .. это был разочаровывающий день, прошедший даром :)). В этом была проблема. Благодарю вас! никогда бы не догадался.. - person Ionut; 07.11.2012
comment
Что ж, в следующий раз, когда вы столкнетесь с этой проблемой, вы очень быстро ее решите. Значит, вы зря не потратили день ;-) - person jddsantaella; 07.11.2012

<rule>
<condition type="request-uri" operator="notequal">\.(images|gif|jpeg|png|css|js|pdf|doc|ico|jsp|jpg)$</condition>
<from>............

это способ остановить запрос от фильтра перезаписи URL-адреса tuskey

person AnilHoney    schedule 29.11.2012