我有以下.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之外,允许每个人来自一个域的最简单方法是什么?
答案 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>
答案 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