复杂的Apache Limit / SetEnvIf,允许除IP

时间:2016-08-08 11:10:22

标签: .htaccess

我有以下.htaccess:

<Limit GET POST>
    SetEnvIf Host www.livedomain.com allow
    SetEnvIf Remote_Addr 1.1.1.1 allow
    SetEnvIf Remote_Addr 2.2.2.2 allow
    SetEnvIf Remote_Addr 3.3.3.3 allow
    Order deny,allow
    Deny from all
    Allow from env=allow
</Limit>

此.htaccess用于两个域。在www.livedomain.com上我希望每个人都能访问。在www.stagingdomain.com上我只希望IP 1.1.1.1,2.2.2.2,3.3.3.3可以访问。

这很好用。

现在,在实际网站上,我想进行更改以允许每个人一个IP(假设为9.9.9.9)。

我尝试过这样的事情:

<Limit GET POST>
    SetEnvIf Host www.livedomain.com allow
    SetEnvIf Remote_Addr 9.9.9.9 deny
    SetEnvIf Remote_Addr 1.1.1.1 allow
    SetEnvIf Remote_Addr 2.2.2.2 allow
    SetEnvIf Remote_Addr 3.3.3.3 allow
    Order deny,allow
    Deny from all
    Allow from env=allow
</Limit>

但这不起作用。我原以为env变量被'deny'覆盖了,然后最终的Allow语句不适用。情况不是这样吗?

在这种情况下,除了一个IP之外,允许每个人来自一个域的最简单方法是什么?

2 个答案:

答案 0 :(得分:1)

您应该使用!varname取消设置或删除已定义的变量:

<Limit GET POST>
    SetEnvIf Host www.livedomain.com allow
    SetEnvIf Remote_Addr 9.9.9.9 !allow
    SetEnvIf Remote_Addr 1.1.1.1 allow
    SetEnvIf Remote_Addr 2.2.2.2 allow
    SetEnvIf Remote_Addr 3.3.3.3 allow
    Order deny,allow
    Deny from all
    Allow from env=allow
</Limit> 

Read more about SetEnvIf here

答案 1 :(得分:0)

我的conf看起来有点不同但按预期工作:

SetEnvIf Host staging.mydomain.tld passreq
SetEnvIf Remote_Addr 1.1.1.1 !passreq
AuthType Basic
AuthName "Password Required"
AuthUserFile /home//html/.htpasswd
Require valid-user
Order allow,deny
Allow from all
Deny from env=passreq
Satisfy any