Apache Mod_Rewrite — как заставить остановиться после срабатывания RewriteRule?

Имею:
.htaccess:
RewriteEngine On

RewriteRule ^/image/.+$ imageWrapper.php [L]

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
— стандартный из поставки Zend Framework 1+ плюс мое правило для /image/;


Apache 2.2.22;

Ожидание:

При обращении по урл http://localhost/image/w/150/h/150/sertificate.jpg выполняется скрипт imageWrapper.php, в который передается REQUEST_URI /image/w/150/h/150/sertificate.jpg, после чего скрипт успешно отрабатывает и умирает.

Реальность:

Выполняется последнее правило, запускается приложение Zend, Роутер сообщает о несуществующем контроллере и акшене.

Вопрос:

Как написать мою конструкцию так, чтобы сбылось ожидание, и почему получается реальность?
  • Вопрос задан
  • 5322 просмотра
Решения вопроса 1
WaveCut
@WaveCut Автор вопроса
PHP Dev
Сам спросил — сам ответил. Необходимо использовать условие:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/image\/.*$
RewriteRule  ^.*$ imageWrapper.php [NC,L]

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
AlexPres
@AlexPres
Если у вас нагруженное приложение и до апача отрабатывает Nginx, то лучше перенести эти правила туда. Иначе получается Nginx → Apache → .htaccess

Я пробовал так сделать, для редиректов получается в несколько раз быстрее, но надо знать, что писать в Nginx, да ещё и без IF-ов (потому что они зло)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы