如何使用mod_rewrite检查IP访问的服务器?

时间:2012-02-23 07:48:10

标签: apache mod-rewrite redirect header ip

我在负载均衡器后面有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会跳过该规则。

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

2 个答案:

答案 0 :(得分:1)

使用REMOTE_ADDR

像这样:

RewriteCond %{REMOTE_ADDR} 1.2.3.4

答案 1 :(得分:0)

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

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

你的第一个条件有一个“错误”,因为你没有反斜杠,它实际上意味着匹配任何角色,即使任何人都不可能在没有点的情况下到达你的服务器。最后添加[NC],因此条件不区分大小写。

希望它有所帮助。