2015-07-28 3 views
2

Я использую tuckey rewrite filter сделать некоторые правила для отображения URL, например, получили следующее:ява URL Rewrite правила фильтрации

<urlrewrite> 
<rule> 
    <from>^/intro</from> 
    <to>w?page=intro</to> 
</rule> 

<rule> 
    <from>^/([a-z0-9]+)/([a-z0-9-]+)$</from> 
    <to>/w?category=$1&amp;post=$2</to> 
</rule> 
</urlrewrite> 

На втором правиле я сопрягая что-то вроде java/variables, все работает, но ...

1. Как я могу соответствовать все, что не в правилах, я хочу, чтобы перенаправить страницу, как unknown/page/will/not/be/found или /introduction к пользовательскому URL.

Для длинных ссылок (более 2-х слов, как Java/переменные/другие) это работает отлично, но я сомневаюсь, что его лучшее решение, до сих пор нету найдено /introduction:

<rule> 
    <from>^/([a-z0-9]+)/([a-z0-9-]+)/([a-z0-9-/]+)$</from> 
    <to>/w?page=$1+$2+$3</to> 
</rule> 

Последнее регулярное выражение ([a-z0-9-/]+) принимает /, как string и отправляет его в качестве параметра сервлета.

2. Нет ли способа поймать все URL-адреса сразу после домена? Например, сразу после / на mydomain.com/, я попытался следующий, но в конечном итоге в бесконечный цикл ошибки:

<rule> 
    <from>^/([a-z0-9-/]+)$</from> 
    <to>w?page=$1</to> 
</rule> 

ПРОБОВАЛИ:

<rule> 
    <from>^/([a-z0-9-/]+)$</from> 
    <to>/w?page=$1</to> 
</rule> 

Чтобы поймать все, но ни один не похоже на работу.

ответ

0

Если вы хотите совместить все, что НЕ в ваших правилах, вы можете добавить правило в конец, чтобы поймать все, что не соответствовало никакому другому правилу. Вам необходимо исключить страницу, которую вы предписывающий, чтобы хотя, или вы будете в конечном итоге в бесконечный цикл перенаправления

<rule> 
    <from>^/(?!mypage)(.*)$</from> 
    <to last="true">/mypage?myparam=$1</to> 
</rule> 

Я думаю, что это также отвечает на вопрос 2?

Полезный совет - вы можете увидеть живое состояние ваших правил (только на локальном хосте), используя этот URL

http://127.0.0.1:8080/rewrite-status 
+0

не кажется, работает:. S – Alpha2k

+0

Это должно поймать все, как регулярное выражение '*' матчи любое количество символов. Вы могли бы попробовать prepending ^, чтобы отметить начало регулярного выражения, а $ для конца '^. * $' ... Если вы проверяете страницу статуса перезаписи, показано, что это правило действует? – Kieran

+0

Просто понял, что нам нужно исключить страницу, на которую мы перенаправляемся, или мы закончим бесконечный цикл ... просто обновил ответ, чтобы это отразить. Надеюсь, что это работает для вас! – Kieran