Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Apache

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

 

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

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

тема: mod_rewrite и флаг [L]
 
 автор: tonnal   (22.12.2006 в 22:00)   письмо автору
 
 

Не могу понять в чем проблема, вробщем mod_rewrite работает нормально все флаги работают а [L] не реагирует проскаивает к следующему условию. Вот пример.


RewriteEngine on
Options +FollowSymlinks

RewriteBase /

RewriteRule ^([^\.]*)$ index.php?dir=/$1&%{QUERY_STRING} [L]

# Вот здесь хотел ограничить прямой запрос к файлу пхп,
# чтоб вообще было непонятно на чем построено
RewriteRule ^index\.php$ 404.php


В других случаях тоже неработает причем ни локально на денвере ни у хостеров... или я вообще не прав?

   
 
 автор: glsv (Дизайнер)   (24.12.2006 в 09:19)   письмо автору
 
   для: tonnal   (22.12.2006 в 22:00)
 

> [L] не реагирует проскаивает к следующему условию.
Не совсем так. [L] срабатывает правильно, обработка RewriteRule прекращается, но
происходит внутренний редирект, в процессе которого все директивы обрабатываются заново.
Причем уже не с исходным запросом, а с преобразованным
index.php?dir=что_то
А этот запрос уже подпадает под преобразование ^index\.php$ 404.php

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

RewriteEngine on 
Options +FollowSymlinks 
RewriteBase / 

RewriteCond %{ENV:REDIRECT_redir} !^yes$
RewriteRule ^index\.php$ 404.php [L]
RewriteRule ^([^\.]*)$ index.php?dir=/$1&%{QUERY_STRING} [E=redir:yes,L] 

После преобразования устанавливается переменная окрежения redir=yes. В результате редиректа она автоматически преобразуется в переменную REDIRECT_redir=yes

И проверяем, если переменной REDIRECT_redir не равна yes, то это исходный запрос (а не преобразованный) и можно запрещать обращения к index.php.

   
Rambler's Top100
вверх

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