我想在我的.htaccess
文件中添加IP过滤器,但在我应用后,会显示太多重定向错误。
.htaccess
的内容:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [L,R=301]
RewriteCond %{HTTPS} on
RewriteCond %{REMOTE_ADDR} xxx.xxx.xxx.xxx
RewriteRule ^ /test.php [R=302,L]
为什么我收到此错误?
答案 0 :(得分:1)
我假设你在这里尝试做两件事:
test.php
您遇到的问题是由于即使IP地址匹配,仍然会在到达test.php
时进行检查。由于再次匹配,重定向将连续循环。通过添加适当的条件,我们在检查IP地址之前检查所请求的URI是否为test.php
。有问题的行显示在我的答案底部附近,其中包括原始代码的增强功能。
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地址,那么您应该为除最后一个IP地址之外的每个IP地址使用OR
标志:
# 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]