В прошлый раз мы с Вами использовали mod_rewrite для запрета доступа к файлу . Очень важным моментом было то, что исключений не делалось, то есть запрет доступа абсолютно для всех. Однако, mod_rewrite позволяет нам задать условия через RewriteCond , при выполнении лишь которых будет выполнено правило в RewriteRule .

Использование 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 совсем не трудное занятие. Единственная проблема здесь - это регулярные выражения. Если Вы их ещё не умеете писать, то обязательно пройдите этот курс - там регулярные выражения подробно разбираются.