Создание сайта. Часть 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} !dumpRewriteRule (.* ) 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
Понравилась статья? Расскажите о ней друзьям: