The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"mod_rewrite, Apache 2.2.23"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (.htaccess, паролирование)
Изначальное сообщение [ Отслеживать ]

"mod_rewrite, Apache 2.2.23"  +/
Сообщение от ILYA INDIGO (ok) on 19-Дек-12, 12:05 
Сервер Apache 2.2.23
Привожу упрощённый вариант содержимого файла .htaccess

RewriteEngine On
RewriteBase /

RewriteRule ^(administrator|pma|stat)/?$ $1/index\.php [L]
RewriteRule ^(\w+)/?$ index\.php\?view=$1 [L]
RewriteRule ^(\w+)/[\w\-']*\-(\d+)\.html/?$ index\.php\?view=$1&id=$2 [L]\

RewriteCond %{REQUEST_URI} !^(/|/sitemap.xml|/robots.txt)$
RewriteCond %{REQUEST_URI} !^/(images|media|templates|uploads)/.*\.(css|js|png|jpe?g|gif)$
RewriteRule .* - [F,L]

Задумка была такая:
1 попадающие под правила URL-ы преобразовать, и первое соответствие правилу должно стать единственным, как я думал флаг L должен вести себя именно так;
2 а все запросы, для которых не подошло ни одно из правил, заблокировать.

В документации к mod_rewrite сказано, что флаг L должен прекратить разбор правил если текущее правило удовлетворяет условию. Но этого не происходит. Данный код блокирует абсолютно все запросы, даже если они попадают под правила, расположенные выше.

http://ew/administrator
http://ew/dir
http://ew/list/List-1-1.html
Почему так получается?
Я не правильно понял документацию, или его нужно как-то на сервере настроить или что то я сделал не верно?
Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "mod_rewrite, Apache 2.2.23"  +/
Сообщение от PavelR (ok) on 19-Дек-12, 13:48 
> Почему так получается?
> Я не правильно понял документацию, или его нужно как-то на сервере настроить
> или что то я сделал не верно?

Добро пожаловать в волшебный мир mod_rewrite.

Если вкратце:

http://lmgtfy.com/?q=mod_rewrite+stop+processing

Если правила написаны в .htaccess, то [L] прекратит поиск по списку, но поиск будет повторен с начала, пока реврайт не перестанет изменять URL или не превысится число попыток.

Если подробно, то вам надо явно разрешить обращения к /index.php

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "mod_rewrite, Apache 2.2.23"  +/
Сообщение от ILYA INDIGO (ok) on 19-Дек-12, 15:40 
>Если вкратце:
>http://lmgtfy.com/?q=mod_rewrite+stop+processing

Я, к сожалению, обладаю не достаточными английским, что бы чётко понимать суть изложенного, а не просто о чём там говорится, так что гуглил только на русском.
> Если правила написаны в .htaccess, то [L] прекратит поиск по списку, но
> поиск будет повторен с начала, пока реврайт не перестанет изменять URL
> или не превысится число попыток.

Поясните пожалуйста эту мысль, я её понял как:
"Педаль тормоза останавливает автомобиль, но автомобиль будет ехать пока не врежется, или пока не закончится топливо."
То есть какой тогда смыл от флага [L]?
> Если подробно, то вам надо явно разрешить обращения к /index.php

Так, конечно же, заработало


RewriteCond %{REQUEST_URI} !^/(|index2\.php|robots\.txt|sitemap\.xml)$
RewriteCond %{REQUEST_URI} !^/(|administrator/|pma/|stat/)index\.php$
RewriteCond %{REQUEST_URI} !^/(administrator|pma|images|media|templates|uploads)/.*\.(css|js|png|jpe?g|gif)$

Но тогда теряется весь смысл этих строк.
Я хотел именно запретить доступ к index.php напрямую, из URI.
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "mod_rewrite, Apache 2.2.23"  +/
Сообщение от PavelR (ok) on 19-Дек-12, 16:23 
>[оверквотинг удален]
>>http://lmgtfy.com/?q=mod_rewrite+stop+processing
> Я, к сожалению, обладаю не достаточными английским, что бы чётко понимать суть
> изложенного, а не просто о чём там говорится, так что гуглил
> только на русском.
>> Если правила написаны в .htaccess, то [L] прекратит поиск по списку, но
>> поиск будет повторен с начала, пока реврайт не перестанет изменять URL
>> или не превысится число попыток.
> Поясните пожалуйста эту мысль, я её понял как:
> "Педаль тормоза останавливает автомобиль, но автомобиль будет ехать пока не врежется, или
> пока не закончится топливо."

Можете обратиться к разработчикам mod_rewrite и высказать им всё, что вы о них думаете.

> То есть какой тогда смыл от флага [L]?

Прекращает поиск для данной итерации. Иначе переписанный URL мог подпасть под другое правило, на данной итерации. В любом случае, была бы еще одна или несколько итераций, пока итерация не оставит URL без изменения.

> Но тогда теряется весь смысл этих строк.
> Я хотел именно запретить доступ к index.php напрямую, из URI.

Значит запрещайте. Я не гуру mod_rewrite, но вы можете попробовать:

http://www.askapache.com/htaccess/mod_rewrite-variables-chea...
Флаг NS (не уверен что это применимо к вашей задаче)

Вы можете попробовать выставлять переменную окружения при реврайте в index.php, и проверять её при проверке доступа к index.php

Можно также реврайтом выставлять специальный параметр вызова index.php и проверять его.

Вы можете также вынести правила из .htaccess в конфигурацию апача, там они будут работать по-другому.

Как-то так.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "mod_rewrite, Apache 2.2.23"  +/
Сообщение от ILYA INDIGO (ok) on 19-Дек-12, 16:50 
>Можете обратиться к разработчикам mod_rewrite и высказать им всё, что вы о них думаете.

Да нет, я против них ничего не имею, просто не правильно понял документацию.
>Прекращает поиск для данной итерации. Иначе переписанный URL мог подпасть под другое >правило, на данной итерации. В любом случае, была бы еще одна или несколько итераций, пока итерация не оставит URL без изменения.

Спасибо, теперь понятно, просто я представил себе это немного иначе.
>http://www.askapache.com/htaccess/mod_rewrite-variables-chea...

Спасибо за ссылку и варианты, буду экспериментировать. :)

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру