2013-10-14 3 views
0

У меня есть приложение Zend Framework 2, и я хочу использовать .htaccess для перезаписи некоторых URL-адресов. Файл .htaccess находится в моей общей папке. Я проверил простые правила перезаписи, которая перезаписывает все testurl в test.phpZend Framework 2 Переписать URL-адрес

RewriteRule ^testurl/?$ test.php [NC] 

Файл test.php также в общей папке. Я разместил это правило над правилом Zend, чтобы отобразить все URL-адреса в index.php в .htaccess.

Мой вопрос в том, как переписать это, чтобы сказать SearchController в индексном модуле? Я пробовал различные правила перезаписи с разными флагами, такие как

RewriteRule ^testurl/?$ /index/search [NC] 
and 
RewriteRule ^testurl/?$ index/search [NC] 

, но я всегда получаю сообщение об ошибке 404 Запрошенный URL не может быть сопоставлен с помощью маршрутизации.

Причина, по которой я хочу использовать .htaccess, заключается в том, что я буду использовать регулярное выражение в правиле rewrite, чтобы поймать несколько разных URL-адресов.

Большое спасибо

ответ

0

Вы либо хотите:

RewriteRule ^testurl/?$ /index/search [NC,L,R] 

Или вам нужно добавить маршрут для testurl в Зенд и направить его к SearchController.

+0

Большое спасибо. Это отлично работает. Я пробовал флаги [NC, L], но это не работало, и я думал, что проблема L заключается в том, что URL-адрес должен быть удовлетворен правилами перезаписи Zend, которые ниже этого в моем .htaccess. Почему R, который, как я понимаю, является временным перенаправлением на URL, заставляет эту работу работать? Еще раз большое спасибо – user12345

+0

@ user12345 без 'R', он внутренне перезаписывает URI. Обычно это означает, что в '/ index/search' должен быть физический ресурс, но то, что у вас здесь, - это маршрут Zend, и ему нужно пройти через систему маршрутизации Zend, чтобы правильно интерпретироваться. Внутренние перезаписывания обычно не собираются сокращать, поэтому требуется внешнее перенаправление. Или вы можете создать новый маршрут или использовать флаг 'P', который обращает прокси-серверы запроса и не будет изменять URL-адрес в адресной строке браузера (будет работать только с загруженным mod_proxy) –

+0

А я вижу. Я думаю, что флаг P - это то, что я ищу, поскольку я хочу, чтобы URL-адрес остался прежним. Большое спасибо – user12345