Поиск:

Ответ в темуСоздание новой темы Создание опроса
> mod_rewrite: Какой порядок применения правил? 
:(
    Опции темы
skyboy
Дата 15.10.2008, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 4
Всего: 260



есть .htaccess:
Код

RewriteEngine on
RewriteBase /
RewriteRule ^(studio|portfolio|services|contacts)/?$ index.php?part=$1 [L]
RewriteRule ^(portfolio|services)/(trademarks|firmstyle|outer|web|polygraph)/?$ index.php?part=$1&subpart=$2 [L]
RewriteRule ^.+$ index.php?part=404 [L]

Для адреса example.com/portfolio/ применяется последнее правило.
Если последнее правило убрать, применяется первое правило(как я и рассчитывал).
Почему так? Да, последнее правило наиболее обобщенное. Но разве правила не выполняются сверху-вниз и [L] разве не отменяет последующую обработку адреса?
PM MAIL   Вверх
Nigel
Дата 18.10.2008, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


познаю мир
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 20.11.2007

Репутация: 7
Всего: 19



skyboy, правила читаются сверху вниз, если правило найдено, то анализатор идет наверх в поисках ближайшего условия. Но все равно в начале происходит анализ всего файла. И если последнее правило переопределит предыдущие, то выполнится именно последнее.
Создай 2 файла test1.php, test2.php
Код

//test1.php
print 'test1 file<br />';
print_r($_GET);

Код

//test2.php
print 'test2 file<br />';
//print_r($_GET);

хтацес файл
Код

RewriteEngine on
RewriteBase /
RewriteRule ^(studio|portfolio|services|contacts)/?$ test1.php?part=$1 [L]
RewriteRule ^(portfolio|services)/(trademarks|firmstyle|outer|web|polygraph)/?$ test1.php?part=$1&subpart=$2 [L]
RewriteRule ^test1\.php$ test2.php?part=404 [L]


И вбей example.com/portfolio/, что получится?

или даже так
Код

RewriteEngine on
RewriteBase /
RewriteRule ^(studio|portfolio|services|contacts)/?$ test1.php?part=$1 [L]
RewriteRule ^(portfolio|services)/(trademarks|firmstyle|outer|web|polygraph)/?$ test1.php?part=$1&subpart=$2 [L]
RewriteRule ^test1\.php$ test2.php?part=404 [L]
RewriteRule ^test2\.php$ test3.php [L,QSA]


зы. когда-то давно видел описание механизма работы модуля mod_rewrite, если найду скину.
ззы. да, кстати, последним правилом хотел вызвать 404? Для этого есть ErrorDocument)

Это сообщение отредактировал(а) Nigel - 18.10.2008, 12:06
PM MAIL   Вверх
skyboy
Дата 18.10.2008, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 4
Всего: 260



Цитата(Nigel @  18.10.2008,  11:01 Найти цитируемый пост)
да, кстати, последним правилом хотел вызвать 404? Для этого есть ErrorDocument)

ога. спасибо. забыл про сие и вот уже велосипедов делаю.
правда, все ж таки интересно и загадочно - я ожидал другой логики и, значит, неправильно понимаю работу mod_rewrite. потому что про 
Цитата(Nigel @  18.10.2008,  11:01 Найти цитируемый пост)
Но все равно в начале происходит анализ всего файла.

я как-то не знал.
правда, вот что
Цитата(Nigel @  18.10.2008,  11:01 Найти цитируемый пост)
Но все равно в начале происходит анализ всего файла. И если последнее правило переопределит предыдущие, то выполнится именно последнее.

из этого я сделал вывод, что если более обобщенное правило вынести в самый вер[ списка, то будет работать как надо. но нет, не работает и так, и так.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Администрирование Web серверов и Web служб | Следующая тема »


 




[ Время генерации скрипта: 0.0410 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.