URL-ы! URL-ы! URL-ы!

URLS! URLS! URLS!
автор: Билл Хамфрис (Bill Humphries) и A List Apart
перевод: Александр Качанов

1. Красивый URL - важная деталь
2. Как настроить Apache
3. RewriteRule для статических страниц

Перекройка URL-а в Apache

Веб-сервер 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=ГГГГ-ММ-ДД. Для этого нам понадобится несколько вещей:

  1. Распознать URL
  2. Выделить из него /ГГГГ/ММ/ДД и превратить его в ГГГГ-ММ-ДД
  3. Записать окончательный URL в виде /archives.cgi?date=ГГГГ-ММ-ДД

Регулярные выражения и RewriteRule

Для данной трансформации необходимо прописать две директивы модуля 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 для статических страниц

Rambler's Top100
Rating All.BY
Akavita
Valid XHTML 1.0!