URLS! URLS! URLS!
автор: Билл Хамфрис (Bill Humphries) и A List Apart
перевод: Александр Качанов
1. Красивый URL - важная деталь
2. Как настроить Apache
3. RewriteRule для статических страниц
Веб-сервер Apache существует как для платформ Unix, так и для NT. К нему написан дополнительный компонент, который называется mod_rewrite. Этот компонент и занимается переделкой URL-а под ваши нужды. Он не входит в стандартную поставку Apache. Тем не менее даже некоторые хостинговые компании ставят его на своих машинах. Если вы работаете со своим собственным сервером, обратитесь к системному администратору, если модуль не установлен, он все сделает.
Модуль mod_rewrite работает по принципу анализа каждого запрошенного URL-а. Если URL совпадает с тем, что упомянут в его правилах замены (rewriting rules), правило применяется и запрос обрабатывается уже с переделанным URL-ом.
Если вы не знакомы с веб-сервером Apache, почитайте статью о том, как его надо конфигурировать. Лучше всего прописывать модуль mod_rewrite в конфигурационном файле сервера httpd.conf, но можно модуль применять и к определенному каталогу отдельно с помощью файла .htaccess. Если вы не имеете доступа к файлу httpd.conf, пожалуй стоит воспользоваться .htaccess, но помните, что это может сказаться на производительности, так как Apache придется считывать .htaccess всякий раз, когда обращаются с запросом к данному каталогу.
Цель - создать такое правило для mod_rewrite, которое превратит
/archives /ГГГГ/ММ/ДД
в
/archives.cgi?date=ГГГГ-ММ-ДД
или что либо подобное, похожее на ваш URL к скрипту.
Начнем с URL типа /archives/ГГГГ/ММ/ДД и переделаем в /archives.cgi?date=ГГГГ-ММ-ДД. Для этого нам понадобится несколько вещей:
Для данной трансформации необходимо прописать две директивы модуля mod_rewrite: RewriteEngine и RewriteRule. Директива RewriteEngine просто включает или выключает использование модуля. Таким образом если переделка URL-а сейчас не нужна, ее можно выключить и при этом сохранить на будущее ту директиву, что использовалась для переделки.
Если вы хотите задать правило для каталога с помощью файла .htaccess, пропишите в нем следующее:
RewriteEngine On
RewriteRule ^archives/([0-9]+)/([0-9]+)/([0-9]+) archives.cgi?date=$1-$2-$3
Данное правило во-первых отлавливает подстроку "archives", за которой идут три группы цифр ([0-9]+) разделенные знаком "/", и переписывает ее в вид "archives.cgi?date=ГГГГ-ММ-ДД". Разборщик строки запоминает ссылки на совпадения, так что мы можем использовать символы $1, $2, $3 - (первое совпадение, второе и так далее…)
Внимание: Если в ваших страницах используются относительные ссылки, эти ссылки будут обрабатываться относительно /archives/ГГГГ/ММ/ДД , а не /archives. Это значит, что ваши относительные ссылки работать не будут. В качестве выхода - используйте элемент <BASE> в заголовке страницы.
1. Красивый URL - важная деталь
2. Как настроить Apache
3. RewriteRule для статических страниц