mod rewrite: правило, срабатывающее, если другие не сработали?

ia

Новичок
mod rewrite: правило, срабатывающее, если другие не сработали?

существует ряд RewriteRule
необходимо создать правило, которое будет выполняться в том случае, если ВСЕ предыдущие не сработали.

как это сделать - не знаю.

в частности пробовал в конце добавить
RewriteRule ^(.+)?$ last.php [L]
и ко всем предыдущим правилам поставить [L]

пробовал после каждого правила назначить значение переменной, а потом в последнем обрабатывать - тоже не сработало...

как решить данную проблему?

з.ы. руководство читал. от туда подчерпнул [L] и возможность присваивать переменной значение.
 

alexhemp

Новичок
Все верно.

Правила просматриваются сверху-вниз.

Пиши последним
RewriteRule ^(.+)$ last.php [L]
 

SiMM

Новичок
По-моему в какой-то из версий Апача что-то подобное
> RewriteRule ^(.+)$ last.php [L]
у меня не работало. Вылечилось установкой более свежего индейца из ветки 1.3. Попробуй оставить это правило единственным (наверно всё же логичнее .*) - если оно не работает - значит дело не в правиле.
 

ia

Новичок
ой, alexhemp и SiMM!
извините, я суть проблемы не описал.

последним правилом как раз стоит RewriteRule ^(.+)$ last.php [L].
все ок. mod_rewrite работает.
НО. ВСЕГДА выполняется это (последнее) правило. предыдущие - не проверяются/не выполняются.

.htaccess такой:
RewriteEngine on
Options +FollowSymlinks
RewriteRule ^$ index.php
RewriteRule ^index/?$ index.php
RewriteRule ^map/?$ map.php
RewriteRule ^(.+)$ last.php [L]

тест провожу как на локальной машине (win), так и на хостинге (nix-хостиг) - а результат один, он описан выше.
 

SiMM

Новичок
> ВСЕГДА выполняется это (последнее) правило
Да... слона-то ты забыл ;)
ia, [L] к другим правилам прикрути.
PS: и, кстати, лучше делать редирект, если слэш забыли.
 

ia

Новичок
SiMM
я так делал
я ещё в первом сообщении писал
>и ко всем предыдущим правилам поставить [L]
результат - тот же.

итоговый .htaccess:
RewriteRule ^$ index.php [L]
RewriteRule ^index/?$ index.php [L]
RewriteRule ^map/?$ map.php [L]
RewriteRule ^(.+)$ last.php [L]

p.s. в каком случае я забыл про слэш?
 

Steamroller

Новичок
Должно срабатывать.
Можно включить RewriteLog и выяснить, что именно там происходит.
 

ia

Новичок
а как?
RewriteLog / прописывая до всех этих выражений приводит к тому, что сервер отдает 500 страницу, а в log апача пишет www/.htaccess: RewriteLog not allowed here
=(
научите пользоваться RewriteLog-ом, пожалуйста
 

Steamroller

Новичок
ia, это в httpd.conf включается. Если хостинг shared и нету туда доступа, то можно попросить админа включить на время. (Потом не забыть попросить выключить, а то объем у такого лога большой).
Можно и в обычный error_log глянуть, вдруг там что интересное есть.
 

ia

Новичок
Steamroller
а иначе никак?
(про обычный error_log я писал, что он выдает)

может кто другие способы знают как решить вопрос?
 

Steamroller

Новичок
Попробуй проверку перед последним правилом добавить:
RewriteCond ${REQUEST_URI} !^last\.php$
RewriteRule ^.+$ last.php [L]
 

SiMM

Новичок
> Вот только где ведущие слеши?
А разве они должны быть в регулярках? :)
 
Сверху