Создание сайта. Часть 10: mod_rewrite

версия для печати

Полное содержание серии - в конце статьи.

Mod_rewrite - это модуль Apache. Обычно используется для преобразования переданного на сервер URL-адреса в другой адрес. Очевидное применение модуля - создание ЧПУ (ЧеловекоПонятныйУРЛ). Для примера посмотрите адрес этой страницы. Как вы наверно догадываетесь, реальный URL у нее не такой :) Использовать этот модуль или нет, решайте сами. Для работы сайта это некритично, зато удобнее для пользователя.

Решил не писать об этом в разделе Apache, т.к. это сложно для новичка. Для меня этот модуль до сих пор – темный лес, несмотря на то, что на сайте успешно работает несколько правил. Избранное из того, что постиг:

В описании правил соблюдение регистра обязательно. Т.е. "RewriteRule" - правильно, "rewriteRule" - неправильно.

Online-дебаггер mod_rewrite на сайте http://madewithlove.be Полезный ресурс, хотя не без косяков.

Для отладки правил rewrite-a можно включить логирование преобразований, при условии, что у вас есть доступ к конфигам web-сервера. Включается парой строк в httpd.conf (главный конфиг Apache):

RewriteLog "D:/Apache2.2/mod_rewrite.log"
RewriteLogLevel 3

Их можно описать в любом месте файла конфигурации. После изменения конфига сервер нужно перегрузить. Обратите внимание, слэшы прямые, не обратные. Уровень логирования: чем больше число, тем подробнее лог, максимум – 9-й уровень. Обычно хвататает 3-4 уровня.

Кроме логирования можно использовать такое правило для получения некоторых значений переменных прямо в адресную строку.

RewriteCond %{QUERY_STRING} !dump
RewriteRule (.* ) http://domain.com/?dump&_host=%{HTTP_HOST}&_URI=%{REQUEST_URI}&_query=%{QUERY_STRING} [R=303,L,QSA]

Это правило нужно разместить в самом начале преобразований, иначе значения могут быть уже преобразованными. Флаг R|redirect – редирект, (т.о. преобразованная строка появится в браузере); L|last – прерывает дальнейшее применение правил на текущем шаге преобразований; QSA|qsappend – указание дописать GET-параметры (если они были) к результирующей строке.

С флагом редиректа неясно: на оф.сайте Apache сказано, что он только добавляет в подстановку схему+адрес хоста, при этом обработка URL продолжается, если вместе в ним не поставить флаг [L]. Однако тесты и логи говорят об обратном – редирект и все на этом. На всякий случай пишете оба флага вместе. С флагом QSA отдельная история.

Важный момент: mod_rewrite преобразует URL, полученный к обработке, и делает внутренний редирект, что вызывает повторную работу модуля над уже переписанным URL. Флаг [L] работает только в текущем этапе преобразований. Есть еще один полезный флаг, S|Skip=n - пропустить N следующих правил в текущем этапе преобразований.

Бродилки кешируют страницы с результатами преобразований. В итоге изменение правила может никак не отразиться в браузере. Поясню на примере. Допустим, вы создаете правило для преобразования:

http://site.ru/NN -> http://site.ru/index.php?news=NN

Как-то его описали, проверяете в браузере и получаете "404: page not found". Это нормальная ситуация :-) Переписываете правило, проверяете – та же ошибка, страница не найдена. Но сейчас уже нельзя сказать наверняка, что это: ваше правило опять неверное или просто браузер из кеша страницу выдает.

Выходы: использовать разные адреса с каждым тестом, например, дописывать &rnd=NN; использовать online-отладчик; чистить кеш.

Использование mod_rewrite в .htaccess менее преподчтительно, чем в конфигах сервера, но к ним хостеры не пускают, поэтому выбора особо нет. Некоторые плюшки модуля, типа RewirteMap, работают только в серверных конфигах. (так сказано на оф.сайте)

Все остальное – в рунетах :)


Если вы читали всю серию и действительно самостоятельно учились создавать сайты, то мне остается вас только поздравить :) Теперь вы знаете больше многих "веб-мастеров" и в разы больше всяких CMS-ников. Последняя рекомендация к прочтению, еще одна книга о безопасности сайтов - Фленов М. "Web-сервер глазами хакера" (2007). Не думайте, что этой книгой описаны все уязвимости и лазейки. Взлом кода, как и его создание – процесс творческий, в книгах о нем пишут постфактум. Кстати, вот вам направление для саморазвития.. ;) Удачи.

[1oo%, EoF]
Остальные статьи серии:
1. Идея
2. Работаем над дизайном
3. HTML, CSS
4. Как работает интернет
5. Apache
6. JavaScript
7. PHP
8. MySQL
9. cookie и сессии
10. mod_rewrite

Понравилась статья? Расскажите о ней друзьям:


Комментарии
Для работы модуля комментариев включите javaScript


Показать/скрыть правила
Имя
[i] [b] [u] [s] [url]
:-) ;-) :D *lol* 8-) :-* :-| :-( *cry* :o :-? *unsure* *oops* :-x *shocked* *zzz* :P *evil*

Осталось 1000 символов.
Код защиты от спама Обновить код
Каждый комментарий проходит ручную модерацию. 100% фильтрация спама.
Продвижение
Время
Метки