Мне нужно разрешить админские URL-адреса сайта быть доступными только с некоторых IP-адресов (в настоящее время всего три IP-адреса), в то время как остальные URL-адреса должны быть доступны каждому. То есть:
- URL-адреса, начинающиеся с
/admin
, должны быть доступны только с 111.111.111.111, 222.222.222.222 и 333.333.333.333. - URL-адреса, не начинающиеся с
/admin
, являются publi c и его нужно отправить на index.php
, чтобы PHP framework мог их обработать.
Вот как я написал .htaccess для этого:
Options +SymLinksIfOwnerMatch
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/admin
RewriteCond %{REMOTE_ADDR} !=111.111.111.111
RewriteCond %{REMOTE_ADDR} !=222.222.222.222
RewriteCond %{REMOTE_ADDR} !=333.333.333.333
RewriteRule ^(.*)$ - [R=403,L]
RewriteCond %{REQUEST_URI} !^/admin
RewriteRule ^ index.php [L]
Это, однако, кажется, не накладывает никаких ограничений; все доступно каждому IP. Моя идея заключалась в том, что хотя ^/admin
соответствует всем URL-адресам, начинающимся с /admin
, !^/admin
делает обратное. Если я уберу последние две строки, URL-адреса /admin
будут защищены, но приложение не будет работать, потому что фреймворк ожидает получения полного URL-адреса.
Затем я подумал, что, возможно, отрицание, которое у меня есть, каким-то образом неправильно и поэтому искал больше. Затем я натолкнулся на синтаксис с отрицательным внешним видом и попытался изменить регулярное выражение второго условия на ^((?!/admin).*)
, которое, похоже, работает так же, как и в первом случае, что говорит мне, что эти два синтаксиса эквивалентны.
Может ли кто-нибудь помочь мне с этим разобраться?