Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Apache

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с rewrite_rule - почему не работает флаг [L] ???
 
 автор: alexk   (19.02.2007 в 22:59)   письмо автору
 
 

Есть следующая структура каталога
site.ru/catalog/ - сам листинг страниц в каталоге
site.ru/catalog/detail3.html - подробная информация сайта в каталоге
В директории site.ru/catalog/ расположен .htaccess в котором прописан следующий код


RewriteEngine On

#информация о сайте
RewriteRule ^detail([0-9]+).html$ detail.php?pid=$1 [L]

#листинг каталога
RewriteRule ^.*$ list.php 

При листинге в каталоге весь урл передается скрипту list.php, а там уже просматривается анализатором.

Проблема в том, что первое правило работает только в случае, если второе правило закомментировать, иначе анализатор постоянно вызывает скрипт list.php. Т.е при вызове catalog/detail1.html, вместо detail.php выдает результат работы list.php.

Поставил флаг [L], чтобы анализатор не шел при совпадении дальше, но он его игнорирует.

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

   
 
 автор: glsv (Дизайнер)   (19.02.2007 в 23:59)   письмо автору
 
   для: alexk   (19.02.2007 в 22:59)
 

Он не игнорирует. Смотрите что происходит:
Сначала обрабатывается первое правило, флаг [L] срабатывает и происходит переадресация на detail.php?pid=.... (до второго правила обработка не дошла).
Но... запрос на переадресованный адрес снова обрабатывается инструкциями mod_rewrite по новой с самого начала.
При этом первое правило RewriteRule уже не срабатывает, т.к. шаблон регулярного выражения не подходит под запрос, но под второе правило подходит все что угодно. И в конечном итоге, оно работает всегда.

Т.е. каждый запрос, даже если это была переадресация средствами mod_rewrite всегда прогоняется по новой через инструкции mod_rewrite. До тех пор пока запрос пройдет через них без преобразований.

Вам нужно изменить второе правило, чтобы оно срабатывало только для определенных URL-ов.

   
 
 автор: alexk   (20.02.2007 в 01:47)   письмо автору
 
   для: glsv (Дизайнер)   (19.02.2007 в 23:59)
 

Понятно. Таких тонкостей не знал. Подумаю как изменить структуру.
Большое спасибо за конструктивный ответ! :)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования