Как использовать несколько правил RewriteRule в htaccess? - PullRequest
0 голосов
/ 29 сентября 2011

Я использую 2 правила RewriteRule в своем htaccess

RewriteEngine on
RewriteBase /
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#if it has member/photo/render_fast forward to photo_render.php
RewriteRule ^member/photo/render_fast(.*) /photo_render.php?r=$1 [L]
# otherwise forward it to index.php
RewriteRule . index.php [L]

Однако это не работает, когда я пытаюсь на своей локальной машине, мой Apache всегда использует второе правило, а в моемна хостинг-сервере Apache всегда отображается ошибка.

Что я делаю не так?

1 Ответ

1 голос
/ 29 сентября 2011

То, что происходит во второй раз (после того, как URI был переписан в /photo_render.php), применяется второе правило, поэтому /photo_render.php переписывается в index.php. Вам нужно добавить несколько условий, когда вы пытаетесь сопоставить что-то вроде . или .*. Это должно работать:

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^member/photo/render_fast(.*) /photo_render.php?r=$1 [L]
# otherwise forward it to index.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

Обратите внимание, что это также не удастся, если по какой-то причине у вас нет photo_render.php.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...