Примечание: начало данной статьи можно найти по этой ссылке.
Первые три примера использования модуля 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 еще больше полезных функций.
За дополнительной информацией можно обратиться к следующим ссылкам: