Москва, Строительный проезд, 7А кор. 4 Работаем: 24/7 +7 495 744 67 74

mod_rewrite и его возможности

На первый взгляд, использование mod_rewrite может показаться сложным, но стоит только разобраться в его основных правилах, синтаксисе, так сразу же он становится «ласковым и дружелюбным». Вот именно с этих особенностей mod_rewrite, что это такое и с чем его едят, и начнем знакомство.

Что такое mod_rewrite?

Прежде всего, на чем стоит акцентировать внимание – это то, что mod_rewrite является модулем Apache и служит для изменения, трансформации УРЛов. Если высказанному определению представить альтернативу, то подмена – самое оно. Например, посетитель в адресной строке браузера ввел адрес:
http://darkghost.pp.ua/page.html

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

Использование mod_rewrite

Для того, чтобы использовать модуль mod_rewrite необходимо указать соответствующие правила его действия (директивы) на сервере Apache. Размещаются эти правила в файле .htaccess, что находится в корне сайта.и имеют вид:
RewriteEngine: Включает/выключает механизм mod_rewrite для текущего запроса.
RewriteRule: Описывает правило изменения адреса URL.
Например, запись вида

RewriteEngine on
RewriteRule ^interesno\.html$ http://www.google.com/ [R=301]

будет перенаправлять посетителей, используя перенаправление 301 со страницы interesno.html на сайт Google

Подробнее остановимся на RewriteRule. Синтаксис данной директивы имеет следующий вид:
RewriteRule Pattern Substitution [Optional Flags]
где
Pattern — регулярное выражение шаблона. Если УРЛ соответствует шаблону, то правило выполняется. Иначе правило пропускается.
Substitution — новый УРЛ, который будет использоваться вместо соответствующего шаблону адреса.
[Optional Flags] — один или несколько флагов, используемые для определения поведение правила.

В файле .htaccess нет ограничений для количества правил RewriteRule. Их может быть задано столько, сколько нужно. Но если на каком-то из них необходимо перейти к следующему правилу, которое содержит УРЛ перенаправления, то в таком случае используем флаг L (последняя директива).

Возможности mod_rewrite

И так, мы выяснили, что модуль mod_rewrite дает возможность делать подмену страниц или переадресовывать посетителя на другой сайт. Но это еще не все возможности модуля. Вот некоторые из них.

Исключение ошибки 404

Ошибка 404 выводится в тех случаях, когда введенный УРЛ не соответствует страницы или она была удалена, перемещена. Если поисковая система или какой-то «чужой» сайт ссылается на эту страницу, то потерять такое «сокровище» не очень приятно.
Данную проблему можно решить следующим образом – перенаправление на новый УРЛ

RewriteEngine on
RewriteRule ^old-url\.html$ /new-url.html [R=301,L]

Разберем детально выражение RewriteRule.
—^old-url\.html$ — в результате такого правила, получаем, что после любого адреса (именно о этом свидетельствует символ ^), за которым следует текст old-url.html и за которым следует символ окончания УРЛ  ($).
Внимание! Чтобы указать, что нам именно нужно выражение .html (с точкой) используют обратный слеш «\»
—/new-url.html – указываем страницу, на которую необходимо осуществить перенаправление
—[R=301,L] – флаги. В данном случаи, используем перенаправление 301 и L — остановить процесс обработки адреса если оно соответствует правилу.

Запрет на использование материала сайта

Часто, чтобы не перегружать свой Хостинг дополнительными картинками, mp3- или видео-файлами и тд, их заимствуют у других. Так например, чтобы установить на сайте чужую картинку, нужно прописать

<img src="http://darkghost.com/photo.jpg" alt="Фото" />

Как можно предотвратить использование моих картинок на чужих сайтах? Ответим на этот вопрос такой директивой

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)? darkghost \.com/.*$ [NC]
RewriteRule .+\.(gif|jpg|png)$ - [F]

В данной директиве наблюдаем новое правило – RewriteCond, которое определяет условие обработки УРЛ, правилу, что за ним следует. В данном примере задано условие – это присутствие значения в переменной HTTP_REFERER.
Второе правило RewriteCond %{HTTP_REFERER} !^http://(www\.)? darkghost \.com/.*$ [NC] указывает на то, что значение указанной переменной не начиналось с http://www.darkghost.com/ или http://darkghost.com/
Флаг [NC] — это чувствительность к регистру символов.
Строка вида — RewriteRule .+\.(gif|jpg|png)$ — [F] – выдаю ошибку «403 Forbidden» (использую флаг [F]), если УРЛ будет содержать имя файла изображения, что заканчивается на .gif, .jpg или .png

Красивые адреса URL-ы (ЧПУ)

Эта возможность пожалуй остается самой главной и востребованной. Ведь многие CMS и не только они, «полюбляют» формировать длинные и «корявые» адреса. Например,
http://darkghost.pp.ua/display_article.php?articleId=my-article
Правда же не очень симпатичен? Попытаемся его сократить к виду:
http://darkghost.pp.ua/articles/my-article/

И так, для этого необходимо:
-чтобы любому выражению за которым следует articles/ за которым может находится любой символ кроме слеша и далее уже может следовать сам слеш. Эта директива будет иметь такой вид — ^articles/([^/]+)/?$
Внимание! Круглые скобки ([^/]+) – это означает, что выражение, которое будет находится после articles/ и которое соответствует указанному правилу (например, my- articles – любой символ кроме слеша) будет отображаться в адресе, оставаться неизменным.
-указываем директиву для Apache. Используй скрипт display_article.php и передай ему текст из шаблона [^/], а также добавь регулярное выражение первой части (наше my- articles, к примеру) в качестве параметра articleId. $1
Если регулярное выражение содержит еще один подшаблон в круглых скобках, то соответствующий ему текст будет храниться в переменной $2, и так далее.
Этому правилу будет отвечать — display_article.php?articleId=$1
-если указанные правила выполнены, завершить процесс трансформации – [L]
Таким образом, в файле .htaccess сложим все в единое

RewriteEngine on
RewriteRule ^articles/([^/]+)/?$ display_article.php?articleId=$1 [L]

И на этом возможности mod_rewrite не заканчиваются. Помимо выше указанных правил (директив) существуют еще к примеру RewriteEngine (механизма преобразования), RewriteOptions (специальные опции для механизма преобразований) и тд. Подробнее о разновидностях правил (директив) можно узнать вот здесь >>>, или же уже в одном из следующих материалов.


адрес

г. Москва, Строительный пр., 7Ак4

телефон

+7 495 744 67 74Круглосуточно
Яндекс.Метрика

Если у Вас есть вопросы, жалобы или предложения по работе нашей компании, напишите нам Нам важно любое мнение. Спасибо.