Делаем Человеко Понятные Урлы (ЧПУ) с помощью mod_rewrite

Четверг, 25 Мар 2010 11:30

Делаем Человеко Понятные Урлы (ЧПУ) с помощью mod_rewrite

Так как преобразование в ЧПУ осуществляется с помощью регулярных выражений, а это целый язык, требующий изучения, то в этой статье хотел бы рассказать о самым популярных форматах преобразования. Но сначала немного теории.

Mod_rewrite — мощный Apache-модуль, который входит в состав дистрибутива. Как же происходит замена URL? Работа модуля осуществляется по принципу «на лету». То есть когда пользователь обращается по ЧПУ-адресу, модуль сразу же проверяется адрес, который замаскирован под ЧПУ, и обращается к ниму. Естественно, посетитель этих манипуляций не замечает и ему кажется, что он обратился по адресу, который ввёл в адресную строку браузера. Какие же преимущества имеют ЧПУ-адреса?

  • Более приятен для посетителей, так как адрес лучше запоминается.
  • Безопасность, так как посетитель не знает реального адреса.
  • ЧПУ, содержащие название статьи, лучше для SEO

Активация модуля mod_rewrite

Как я уже сказал, модуль включён в стандартный дистрибутив, поэтому нам всего лишь нужно его активировать. Активация происходит в .htaccess. Итак, приступим. Открываем наш файл .htacces или создаём, если его нет. Прописываем следующую директиву:

RewriteEngine on

Отлично, теперь наш модуль активен и мы можем приступить в преобразованиям. Рассмотрим первый формат.

Статический ЧПУ-адрес с одной переменной

Итак, в этой статье я говорил, что сайты на PHP и MySQL имеют адреса следующего формата:

Делаем Человеко Понятные Урлы (ЧПУ) с помощью mod_rewrite

Как правило, такие адреса называют динамическими. Вот мы сейчас и займёмся преобразованием динамических адресов в ЧПУ.

Допустим, нужно преобразовать из lis.php?id=3 в bols3.hi. Регулярное выражение будет иметь следующий формат:

RewriteRule ^НАЗВАНИЕ СТРАНИЦЫ([0-9]+)\.РАСШИРЕНИЕ$ ИМЯ НАСТОЯЩЕГО АДРЕСА.php?ПЕРЕМЕННАЯ=$НУМЕРАЦИЯ

То есть в нашем случае получаем следующее:

RewriteRule ^bols([0-9]+)\.hi$ lis.php?id=$1

Теперь вместо адреса lis.php?id=90 (где 90 — id) мы можем спокойно обращаться к bols90.hi.

Статический ЧПУ-адрес с множеством переменных

Рассмотрим такую ситуацию, когда нужно преобразовать адрес с множеством переменных. Например, из lis.php?id=345&cat=3 в bols345-3.hi. Ситуация похожая, но сейчас используется две GET-переменные. В качестве разделителя используется тире. Получаем следующее выражение:

RewriteRule ^bols([0-9]+)-([0-9]+)\.hi$ lis.php?id=$1&cat=$2

Графически сам принцип преобразования будет выглядить следующим образом:

Делаем Человеко Понятные Урлы (ЧПУ) с помощью mod_rewrite

Архивный ЧПУ-адрес

Многие архивы на сайте имеют адрес archive.php?year=2003&month=10. Мы же преобразуем его в archive/2003/10/. Получаем следующую строку:

RewriteRule ^archive/([0-9]+)/([0-9]+)\$ archive.php?year=$1&month=$2

ЧПУ-адрес для тегов

Сейчас теги присутствуют почти на каждом блоге и сайте. Попробуем изменить адрес для тега winter - posts.php?tag=winter в posts/tags/winter/. Имеем следующее выражение:

RewriteRule ^posts/tags/([0-9]+)\$ posts.php?tag=$1

Кстати, для индексации страниц с динамическими адресами поисковые системы применяют отдельный алгоритм. Я не знаю чем он отличает от обычного, но ЧПУ-преобразования, опять же, помогают указать роботу, что нужно индексировать наш адрес, как обычную статическую страницу.

Взято



Вы можете оставить отзыв или трекбек со своего сайта.

Ваш отзыв