3

Я настраиваю правила URL, используя Tuckey UrlRewrite. Все, чтобы работать до сих пор, однако я борюсь со своей страницей по умолчанию.JSF UrlRewriteFilter catchall/404 replacement

Цель: - Любой запрос не соответствует существующему файлу; или - Любой запрос, не соответствующий предыдущим правилам ... должен начать поиск через search.jsf?q=. Он предназначен для обработки любой возможной мертвой ссылки с старого сайта и для замены страницы 404 с чем-то более функциональным (чтобы помочь пользователю найти то, что он на самом деле ищет).

Частичный код (остальные правила похожи на 2-й один, только правило «по умолчанию» делает аварии):

<rule> 
    <name>Home</name> 
    <from>^/$</from> 
    <to type="forward" last="true">/home.jsf</to> 
</rule> 

<rule> 
    <name>Contact Us</name> 
    <from>^/contact_us/?$</from> 
    <to type="forward" last="true">/contactUs.jsf</to> 
</rule> 

<rule> 
    <name>Default + 404</name> 
    <from>^/[^\s]+$</from> 
    <to type="forward">^/search.jsf?q=$1</to> 
</rule> 

Это вызывает переполнение стека, поскольку это соответствует search.jsf к [^\s]+ даже если есть физический файл, соответствующий search.jsf.

Любое другое правило имеет last="true", так как ни одно из них не должно перекрываться (за исключением этого, очевидно,).

Я читал UrlRewriteFilter manual и не мог найти ничего кроме last="true", который теоретически должен остановить процесс от проверки других совпадений, если он уже нашел его.

спасибо!

EDIT: С отсутствием ответов и моей неспособностью решить эту проблему, я проверил альтернативный путь. Обратитесь к this question here.

ответ

1

Я ничего не знаю о Таки, но я могу думать о двух простых решений:

Создать правило для поиска подобного переписывает URL, как /search?q=foo к /search.jspf?q=foo

Я предполагаю, что-то вроде:

<rule> 
    <name>Search</name> 
    <from>^/search\?(.*)$</from> 
    <to type="forward" last="true">/search.jsf?\1</to> 
</rule> 

Тогда просто изменить правила по умолчанию, чтобы использовать /search вместо фактического файла /search.jspf:

<rule> 
    <name>Default + 404</name> 
    <from>^/[^\s]+$</from> 
    <to type="forward">^/search?q=$1</to> 
</rule> 

Перепишите соответствия регулярное выражение вашего правило по умолчанию, чтобы специально исключить search.jspf с использованием отрицательного предпросмотра:

<rule> 
    <name>Default + 404</name> 
    <from>^/(?!search.jspf)[^\s]+$</from> 
    <to type="forward">^/search.jspf?q=$1</to> 
</rule> 
Смежные вопросы