СтатьиМодуль mod_rewrite. Часть 2
В прошлой главе мы познакомились с основами модуля
Это "правило" глобально, то есть каждый получит указанное сообщение об ошибке. Напомню, что Мы можем ограничивать "правило" при помощи различных "условий правила". "Правило" будет выполнено только в том случае, если перед ним будет встречен ряд условий. Синтаксис: условие должно предшествовать правилу! Возьмем еще один пример (запись в файле .htaccess): RewriteEngine on Options +FollowSymlinks RewriteBase / RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon RewriteRule ^.*$ - [F] Назначение первых трех записей было подробно разобрано в первой части публикации. Их функция — включение "движка перезаписи", то есть самого модуля. Последние две строки запрещают доступ поисковому роботу под кодовым названием "EmailSiphon"(имеется ввиду имя юзер-агента). Данный робот является сборщиком почтовых адресов с различных веб страниц. Строка: RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon состоит из трех частей:
Проверочная строка — переменная сервера, которая может быть записана в общей форме: Образец условия — регулярное выражение. Для более полного понимания темы стоит рассмотреть регулярные выражения как класс. Регулярные выраженияРегулярные выражения — это механизм, позволяющий задать шаблон для строки и осуществить поиск данных, соответствующих этому шаблону в заданном тексте. Кроме того, дополнительные функции по работе с такими выражениями позволяют получить найденные данные в виде массива строк, произвести замену в тексте по шаблону, разбиение строки по шаблону и т.п. Однако главной их функцией, на которой основаны все остальные, является именно функция поиска в тексте данных, соответствующих шаблону (образцу), описанному в синтаксисе регулярных выражений. Регулярные выражения подобны маленькому, компактному языку программирования со своими правилами. Например, регулярное выражение: s/abc/xyz/g
заменит строку Вот краткий обзор наиболее важных элементов с некоторыми примерами:
Регулярные выражения конструируются с помощью этих элементов и других "обычных" символов. Они не являются отдельным языком, а используются другими средствами, например языками программирования типа Perl или PHP, а также текстовыми редакторами (Emacs).
Если говорить о связи регулярных выражений и модуля
Но, поскольку данное регулярное выражение не содержит символ Последняя строка нашего примера: RewriteRule ^.*$ - [F] определяет, что именно нужно делать, когда робот запросит доступ.
Регулярное выражение
Точка
"EmailSiphon", конечно, не единственный почтовый сборщик. Другой известный член этого семейства - "ExtractorPro". Допустим мы хотим запретить доступ и этому роботу. В таком случае нам необходимо еще одно условие.
Теперь файл RewriteEngine on Options +FollowSymlinks RewriteBase / RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR] RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro RewriteRule ^.*$ - [F]
Третий аргумент
Флажок RewriteCond %{HTTP_USER_AGENT} ^emailsiphon [NC] Эта строка определяет, что и "emailsiphon" и "EmailSiphon" будут признаны как идентичные выражения. Вы можете использовать сразу несколько флажков, разделяя их запятыми. RewriteCond % {HTTP_USER_AGENT} ^EmailSiphon [NC, OR] RewriteCond % {HTTP_USER_AGENT} ^ExtractorPro
Нет никаких ограничений по числу условий. Таким образом, Вы можете блокировать 10, 100, 1000 или более известных почтовых сборщиков. Определение этих 1000 условий — просто вопрос загрузки сервера и прозрачности файла
В вышеупомянутом примере используется глобальная переменная REMOTE_HOST REMOTE_ADDR
Например, если Вы хотите заблокировать паука пришедшего с RewriteCond % {REMOTE_HOST} ^www.site.ru$ RewriteRule ^.*$ - [F] Если Вы хотите заблокировать определенный IP адрес, условие будет выглядеть так: RewriteCond % {REMOTE_ADDR} ^212.37.64.10$ RewriteRule ^.*$ - [F] В регулярном выражении по проверке точного и полного IP адреса нужно использовать начальные и конечные якоря. Также можно исключить целый диапазон: RewriteCond %{REMOTE_ADDR} ^212.37.64. RewriteRule ^.*$ - [F]
Этот пример показывает, как можно заблокировать диапазон IP адресов с А вот маленькая задачка для проверки приобретенных знаний (решение будет дано в следующей части): RewriteCond %{REMOTE_ADDR} ^212.37.64 RewriteRule ^.*$ - [F] Внимание, вопрос!
Если мы пишем в регулярном выражении
До сих пор мы использовали простой |
||