|
|
|
| Не могу понять в чем проблема, вробщем mod_rewrite работает нормально все флаги работают а [L] не реагирует проскаивает к следующему условию. Вот пример.
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^([^\.]*)$ index.php?dir=/$1&%{QUERY_STRING} [L]
# Вот здесь хотел ограничить прямой запрос к файлу пхп,
# чтоб вообще было непонятно на чем построено
RewriteRule ^index\.php$ 404.php
|
В других случаях тоже неработает причем ни локально на денвере ни у хостеров... или я вообще не прав? | |
|
|
|
|
|
|
|
для: 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. | |
|
|
|