Использование RewriteCond в mod_rewrite
В прошлый раз мы с Вами использовали mod_rewrite для запрета доступа к файлу. Очень важным моментом было то, что исключений не делалось, то есть запрет доступа абсолютно для всех. Однако, mod_rewrite позволяет нам задать условия через RewriteCond, при выполнении лишь которых будет выполнено правило в RewriteRule.
Давайте с Вами разберём следующий пример:
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^127.0.0.1$
RewriteRule ^secret.php$ - [F]
В директиве RewriteCond указываются условия, выполнив которые, будет вызвано правило. Мы написали, что если IP-адрес (конструкция %{REMOTE_ADDR}) не является 127.0.0.1 (регулярное выражение "!^127.0.0.1$"), то в этом случае надо вызвать RewriteRule и закрыть доступ к файлу.
Разберём ещё один пример с использованием RewriteCond:
RewriteEngine on
RewriteCond %{REMOTE_ADDR} ^127.0.0.1$ [OR]
RewriteCond %{REMOTE_ADDR} ^127.0.0.2$
RewriteRule ^secret.php$ - [F]
В данном случае мы уже написали два условия. Для того, чтобы выполнялось правило, необходимо выполнение всех предшествующих перед ним условий. Но если мы поставим флаг [OR], то тогда достаточно выполнения либо этого условия, либо следующего за ним.
Помимо флага [OR], есть флаг [NC] - означающий игнорирование регистра символов. В случае, с IP-адресом он смысла не имеет. Поэтому давайте с Вами разберём ещё следующий пример:
RewriteEngine on
RewriteCond %{HTTP_REFERER} ^http://(www\.)?example1\.com/.*$ [NC, OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?example2\.com/.*$ [NC]
RewriteRule ^secret.php$ - [F]
В данном примере мы запретили доступ к файлу secret.php, если пользователь пришёл с сайта example1.com или example2.com.
Как видите, использование RewriteCond в mod_rewrite совсем не трудное занятие. Единственная проблема здесь - это регулярные выражения. Если Вы их ещё не умеете писать, то обязательно пройдите этот курс - там регулярные выражения подробно разбираются.
-
- Михаил Русаков
Комментарии (1):
Спасибо за статью!
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.