В предыдущей статье мы разобрались, что такое ЧПУ, и что с его помощью можно реализовать. Но это все теория. Сейчас я на практике опишу простую модель внедрения человеко-понятных 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». Но даже эта пара строк позволит вам создать полноценный ЧПУ для вашего Интернет-ресурса.