.htaccess |重定向太多

时间:2015-06-16 15:06:19

标签: apache .htaccess mod-rewrite redirect

我想在我的.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]

为什么我收到此错误?

1 个答案:

答案 0 :(得分:1)

我假设你在这里尝试做两件事:

  1. 强制使用HTTPS和 www。
  2. 如果某个IP正在发出请求,则重定向到test.php
  3. 您遇到的问题是由于即使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]