Настройка mod_rewrite (часть 2)

Примечание: начало данной статьи можно найти по этой ссылке.

Первые три примера использования модуля rewrite, приведенные в предыдущей части, продемонстрировали, как переписывать URL-адреса, делая их запоминающимися и упрощая доступ к сайту.

Чтобы обеспечить выполнение правила (RewriteRules) только при определенных обстоятельствах, можно задать отдельные условия (Rewrite Conditions, RewriteCond).

Пример 1: защита от хотлинкинга

Хотлинкинг – это использование сервером изображения или объекта, размещенного на другом сервере. Это негативно влияет на пропускную способность пострадавшего сервера, а также снижает количество дополнительных посетителей этого сайта.

Чтобы защитить сайт от хотлинкинга, можно перенаправить все ссылки на другой объект или изображение или вообще запретить такую операцию.

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?example\.com/.*$ [NC] RewriteRule .*\.(gif|jpeg|png)$ http://www.example.com/unpleasantness.jpg [R,NC,L]

Рассмотрим данный блок кода подробнее:

  • %{HTTP_REFERER}: указывает, откуда поступает трафик. Знак процента означает, что это переменная Apache.
  • !: восклицательный знак отрицает шаблон, заданный после него. По сути, он указывает на то, что все, что идет за ним, не подпадает под условия, на которые распространяются правила перезаписи.
  • ^$: как говорилось ранее, символ вставки указывает на начало строки, а знак доллара – на ее окончание. В данном случае между ними нет никакого кода, следовательно, этой строки не существует. Другими словами, эта комбинация символов заявляет, что правила перезаписи не распространяются на прямые ссылки.
  • Второе условие ссылается на реферер (referrer) еще раз.
  • !^http://(www\.)?example\.com/.*$: восклицательный знак указывает, что реферером не может быть ваш собственный сайт.
  • Далее следует собственно правило, в котором говорится, что любая ссылка на файл с расширением gif, jpeg или png будет перенаправлена на какое-то неприятное изображение.

Чтобы просто запретить пользователям доступ ко всем изображениям, внесите небольшую поправку в последнюю строку RewriteRule. Вместо того чтобы указывать альтернативное место назначения (как в примере выше), можно перенаправить ссылку к запрещенной странице:

RewriteRule .*\.(gif|jpeg|png)$ - [F]

Пример 2: как добавить www?

Еще одна полезная функция mod_rewrite – возможность добавить к домену www. Конечно, посетителям сайта понятно, что example.com и www.example.com – это один и тот же сайт; но поисковые системы регистрируют их в качестве дубликатов, что негативно сказывается на рейтинге.

Чтобы решить эту проблему, можно либо последовательно удалить www, либо наоборот – всегда добавлять www к ссылке. Чтобы добавить www, используйте следующий код:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301]

Рассмотрим данный блок кода подробнее:

  • %{HTTP_HOST}: ссылается на сайт.
  • ^example.com$: объясняет, что запрашиваться должна страница example.com.
  • ^(.*)$: данное правило говорит, что любой текст после него будет ссылаться на эту страницу.
  • [R=301]: данный флаг обозначает, что URL перенаправлен (301 указывает, что это постоянное перенаправление; временное перенаправление обозначается числом 302).

После этого все ссылки example.com будут заменены ссылками www.example.com.

Пример 3: блокировка ip-адреса

Это очень удобный способ пресечения доступа к сайту (например, определенных вредоносных IP-адресов).

RewriteCond %{REMOTE_ADDR} ^(12\.34\.56\.789)$
RewriteRule (.*) - [F,L]

Данный код выполняет следующие действия:

  • %{REMOTE_ADDR}: ссылается на IP-адрес, который нужно заблокировать.
  • ^(12\.34\.56\.789)$: данный раздел указывает вредоносный IP. Обратите внимание: обратные косые черты очень важны. Они указывают, что в данном случае точки являются знаками пунктуации и не должны рассматриваться как групповые символы стандартного регулярного выражения.
  • (.*):  означает, что любой текст с заблокированного IP приведет выполнению правила перезаписи.
  • [F,L]: данные флаги заканчивают правило. [F] запрещает доступ, а [L] запрещает использование любых других правил, таким образом делая это правило последним.

Итоги

Первый раздел данной статьи – краткий обзор возможностей модуля mod_rewrite.

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

За дополнительной информацией можно обратиться к следующим ссылкам:

Tags: , , , ,

Добавить комментарий