.htaccess разрешает использование некоторых URL-адресов с некоторых IP-адресов, оставьте все URL-адреса открытыми - PullRequest
0 голосов
/ 01 февраля 2020

Мне нужно разрешить админские 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).*), которое, похоже, работает так же, как и в первом случае, что говорит мне, что эти два синтаксиса эквивалентны.

Может ли кто-нибудь помочь мне с этим разобраться?

...