mod_rewrite - правило по умолчанию

kvf77

Red Devil
mod_rewrite - правило по умолчанию

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

filter

Новичок
По идее добавить последним в список правил что-то типа
RewriteRule .* <твой вариант>
 

filter

Новичок
Не срабатывает все предыдущее?

-~{}~ 17.12.04 12:52:

Добавь флаг L к каждому предыдущему
 

kvf77

Red Devil
не помогает
вот пример моего .htaccess:
RewriteEngine on
RewriteBase /
RewriteRule ^.htaccess$ - [F]
RewriteRule ^admin/?$ index.php?name=admin [L]
RewriteRule ^([^/]*)/admin/?$ index.php?lang=$1&name=admin [L]
RewriteRule ^admin/([^/]*)/([^/]*)/?([^/]*)/?$ index.php?name=$1&action=$2&params=$3 [L]
RewriteRule ^([^/]*)/admin/([^/]*)/([^/]*)/?([^/]*)/?$ index.php?lang=$1&name=$2&action=$3&params=$4 [L]
RewriteRule ^view/?$ index.php?name=view [L]
RewriteRule ^([^/]*)/view/?$ index.php?lang=$1&name=view [L]
RewriteRule ^view/([^/]*)/?$ index.php?name=view&params=$1 [L]
RewriteRule ^([^/]*)/view/([^/]*)/?$ index.php?lang=$1&name=view&params=$2 [L]
RewriteRule ^popup/?$ index.php?name=popup [L]
RewriteRule ^([^/]*)/popup/?$ index.php?lang=$1&name=popup [L]
RewriteRule ^popup/([^/]*)/?(.*)/$ index.php?name=popup&action=$1&params=$2 [L]
RewriteRule ^([^/]*)/popup/([^/]*)/?(.*)/$ index.php?lang=$1&name=popup&action=$2&params=$3 [L]
RewriteRule ^(.*)$ index.php?name=site_view

-~{}~ 17.12.04 14:37:

последнее правило все забивает :-(
 

Orlis

Guest
Поставь первым правило:
PHP:
RewriteRule ^index\.php$ - [L]
 

kvf77

Red Devil
Тот же эффект - не понимаю, чем эта команда могла бы помочь. Я вот так же не понимаю, почему [L] не срабатывает? Ведь все условия прекрасно работают, если нет последней строки.
Может это глюк под виндой такой?
 

Orlis

Guest
Ты попробуй:
1) сделать то, что тебе посоветовали
2) изучить логи, которые может создавать mod_rewrite
3) изучить документацию

Если уж и это не поможет тебе понять, то пиши стихи, а не проги...

...после выполнения последнего правила, модуль запускает проверки всех правил заново, до тех пор пока не найдет точного соответствия или больше ничего нельзя изменить.
 

kvf77

Red Devil
Я попробовал вссе что вы советовали - не работает. Попробуй сам - огласи результат. Я всегда пробую что советуют. Категоричный ты мой.
 

filter

Новичок
Подредактированная версия от Orlis
RewriteRule ^/index.php - [L]

Попробуй
 

svetasmirnova

маленький монстрик
kvf77
>Я вот так же не понимаю, почему [L] не срабатывает?
>Ведь все условия прекрасно работают, если нет последней строки.
>Может это глюк под виндой такой?

Попробовала ваш код вместе с советами: всё как вы и говорили, последнее забивает всё.
Править не пыталась :)
Но! Обратите внимание: в моих настройках [L] срабатывает всегда.
(Windows + Apache 2.0.x и UNIX + Apache 1.3.x)
Вывод: править правила.
Или использовать ErrorDocument (если можно, конечно)
 

slach

Новичок
ну еще можно
в начале поставить

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
 

svetasmirnova

маленький монстрик
Было у меня сегодня пару минуток взглянуть ещё раз.
Лечится так (предпоследняя строчка, флаг C вместо L):
PHP:
RewriteRule ^([^/]*)/popup/([^/]*)/?(.*)/$ hello.php?lang=$1&name=popup&action=$2&params=$3 [C]
Подробно - здесь:
http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html
Кстати, где-то на этом форуме впервые ссылку увидела :)

-~{}~ 20.12.04 00:48:

Ха-ха!
Тогда последнее правило не срабатывает :)
Даже интересно стало!
Последний вариант:
PHP:
RewriteRule ^([^/]*)/popup/([^/]*)/?(.*)/$ index.php?lang=$1&name=popup&action=$2&params=$3 [L]
RewriteCond %{REQUEST_URI}	!index
RewriteRule ^(.*)$ index.php?name=site_view
Не красиво, зато работает...
 
Сверху