Делаем ЧПУ через Apache-модуль mod_rewrite | SelkinVitaly.RU
Делаем ЧПУ через Apache-модуль mod_rewrite | SelkinVitaly.RU

Делаем ЧПУ-адреса с mod_rewrite

Рубрика: Файл .htaccess

Просмотров: 7822

Приветствую вас, дорогие читатели! В прошлой статье по технологии PHP+MySQL я упомянул Apache-модуль mod_rewrite, который позволяет преобразовывать URL адреса.

ЧПУ ссылки и Apache-модуль mod rewrite

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

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

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

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

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

RewriteEngine on

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

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

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

Делаем ЧПУ-адреса на сайте с PHP и MySQL

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

Допустим, нужно преобразовать из 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

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

Комментарии:

Добавил: Сакен (23-Feb 2010 12:52:28)


url=site.com/index.php?page=company
url=site.com/company/ 
RewriteEngine on
RewriteRule ^([0-9]+)$index.php?page=$1

У меня не получается подскажите?

Селькин Виталий:
А как он у вас определяет, что данное преобразование нужно сделать именно для этой страницы? Этих строк недостаточно.


Добавление комментария:

Имя *:

Email:

Текст *:

Символы на картинке *:

RSS-подписка
RSS-подписка на статьи по основам сайтостроения RSS-подписка на полезные уроки по web-языкам
Разделы статьй
Каталог товаров
Разделы уроков
Последние статьи
Последние уроки