Реализация ЧПУ и «mod_rewrite»

Реализация ЧПУ и «mod_rewrite»

В предыдущей статье мы разобрались, что такое ЧПУ, и что с его помощью можно реализовать. Но это все теория. Сейчас я на практике опишу простую модель внедрения человеко-понятных URL на сайт, с использованием файла дополнительной конфигурации веб-сервера «.htaccess».

Модуль «mod_rewrite» имеющийся в составе Apache – это мощнейшее, интеллектуальное средство преобразования URL адресов. Он представляет собой основанный на правилах механизм (синтаксический анализатор с применением регулярных выражений), выполняющий УРЛ преобразования на лету. Модуль поддерживает неограниченное количество правил и связанных с каждым правилом условий, реализуя действительно гибкий и мощный механизм управления ссылками.

Для начала нам необходимо создать файл «.htaccess» и поместить его в корень нашего сайта. Для запуска механизма преобразования запишем в него следующее выражение:

RewriteEngine On

Таким образом «движок» модуля активирован и можно начинать заполнять его правилами.

Директива «RewriteRule» располагает правилами, при соответствии которым происходят преобразования. Общий синтаксис выглядит следующим образом:

RewriteRule шаблон подстановка [флаг]

# шаблон – регулярное выражение

# подстановка – выражение подстановки значений

# флаг – необязательное поле, указывающее дополнительные опции

Чтобы преобразовать адрес: «mysite.ua/?a=stati» в ЧПУ 1-го уровня: «mysite.ua/stati» запишем правило:

RewriteRule ^([a-z0-9-]+)$ /?a=$1 [NC]

где:

шаблон – выражение «^([a-z0-9-]+)$», под которое попадают строчные латинские буквы, цифры и дефис;

подстановка – выражение «/?a=$1», переменной «a», при соответствии шаблону, подставляется значение из круглых скобок;

флаг – выражение «[NC]», означающее регистронезависимость, разрешает, также, и заглавные буквы.

Усложняем задачу. Теперь преобразуем УРЛ: «mysite.ua/?a=stati&b=soveti» в ЧПУ 2-го уровня: «mysite.ua/stati/soveti», добавив правило:

RewriteRule ^([a-z0-9-]+)/([a-z0-9-]+)$ /?a=$1&b=$2 [NC]

Тут мы видим, что наш шаблон состоит уже с двух пар круглых скобок, разделенных слешем. Подстановка также видоизменилась и включает в себя уже две переменные, объединенные амперсантом.

Поясню. «$1» соответствует 1-ой паре круглых скобок шаблона, «$2» – 2-ой паре, а маркеры «^» и «&» регулярного выражения определяют, соответственно, начало и конец строки. Знак «+» означает хотя бы одно повторение перечня (либо интервала) символов, заключенных в квадратные скобки.

Преобразовать в ЧПУ 3-го уровня: «mysite.ua/stati/kak-dostat-soseda» GET-запрос: «mysite.ua/?a=stati&b=soveti&c=kak-dostat-soseda» особого труда не составит. Также как и в предыдущие разы добавляем дополненное правило:

RewriteRule ^([a-z0-9-]+)/([a-z0-9-]+)/([a-z0-9-]+)$ /?a=$1&b=$2&c=$3 [NC]

Вы спросите: «А почему именно добавляем, а не заменяем?» Отвечаю. Так как на сайте мы можем находиться на разных уровнях иерархии, то бишь разделах, подразделах и т.д., соответственно для каждого уровня у нас должно быть свое правило.

Все вышепредставленное – это лишь малая часть вершины айсберга, по сравнению со всеми возможностями модуля «mod_rewrite». Но даже эта пара строк позволит вам создать полноценный ЧПУ для вашего Интернет-ресурса.

20.11.2014
Андрей Турченко
Всего: 55319 Сегодня: 15
Programing & Design by: © DOHC. Powered by: © DoNS 1.7. 2014-2024. Разработка сайтов