Я предполагаю, что вы пытаетесь сделать две вещи здесь:
- Force HTTPS и WWW.
- Перенаправление на
test.php
, если определенный IP делает запрос
вопрос вы столкнулись было связано с тем, что даже если IP-адрес был подкрепляются, он все еще проверяется на при достижении test.php
, Поскольку снова будет матч, перенаправление будет циклически работать непрерывно. Добавляя соответствующее условие, мы проверяем, чтобы запрошенный URI не test.php
перед проверкой IP-адресов. Строка, о которой идет речь, показана в нижней части моего ответа, которая включает усовершенствования вашего исходного кода.
RewriteEngine on
# Force HTTPS
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
# Force www
RewriteCond %{HTTP_HOST} ^www\.
RewriteCond %{HTTPS}s ^on(s)|off
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)?(.+)$
RewriteRule^%1%3%{REQUEST_URI} [R=301,L]
# Redirect to test.php if a certain IP is matched
RewriteCond %{REQUEST_URI} !^/test\.php
RewriteCond %{REMOTE_ADDR} xxx.xxx.xxx.xxx
RewriteRule^/test.php [R=302,L]
Если необходимо указать несколько IP-адресов, то вы должны использовать OR
флаг для каждого IP-адреса, кроме последнего:
# Redirect to test.php if a certain set of IPs are matched
RewriteCond %{REQUEST_URI} !^/test\.php
RewriteCond %{REMOTE_ADDR} xxx.xxx.xxx.xxx [OR]
RewriteCond %{REMOTE_ADDR} xxx.xxx.xxx.xxx [OR]
RewriteCond %{REMOTE_ADDR} xxx.xxx.xxx.xxx [OR]
RewriteCond %{REMOTE_ADDR} xxx.xxx.xxx.xxx
RewriteRule^/test.php [R=302,L]
Потому что, если ваш '% {REMOTE_ADDR} 'matches, вы отправите заголовок' Location' '/ test.php', на который будет перенаправлен ваш браузер. В этот момент он будет соответствовать '% {REMOTE_ADDR}' и '^', а затем отправит заголовок 'Location''/test.php'. В этот момент .... – arco444