【问题标题】:How to check if server accessed by IP with mod_rewrite?如何使用 mod_rewrite 检查 IP 是否访问服务器?
【发布时间】:2012-03-13 14:52:34
【问题描述】:

我在负载平衡器后面有 Web 服务器。他们都有以下规则来帮助 SEO(www.example.org 指向负载均衡器):

RewriteCond %{HTTP_HOST}   !www.example.org
RewriteRule ^/(.*)          http://www.example.org/$1  [L,R=302]

我希望能够通过 IP 直接访问这些服务器,在这种情况下不能应用上述规则,否则人们将被重定向到负载均衡器。我尝试了以下条件:

RewriteCond %{HTTP_HOST} 1.2.3.4
RewriteRule (.*)           $1 [L]

问题是通过IP访问时,%{HTTP_HOST}没有设置,mod_rewrite跳过规则。

问:如何检查丢失或空的主机标头?

【问题讨论】:

    标签: apache mod-rewrite redirect header ip


    【解决方案1】:

    使用REMOTE_ADDR。

    像这样:

    RewriteCond %{REMOTE_ADDR} 1.2.3.4
    

    【讨论】:

      【解决方案2】:

      也许您可以通过添加另一个条件来检查不为空的 %{HTTP_HOST} 来阻止重定向到负载均衡器,如下所示:

      RewriteCond %{HTTP_HOST}   !^www\.example\.com [NC]
      RewriteCond %{HTTP_HOST}   !^$
      RewriteRule ^/(.*)          http://www.example.org/$1  [L,R=302]
      

      您的第一个条件有一个“错误”,因为您没有反斜杠点,它实际上意味着匹配任何字符,即使没有点任何人都不太可能访问您的服务器。最后添加 [NC],因此条件不区分大小写。

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 2011-11-12
        • 2011-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多