已解决:这个想法是,如果访问者来自中国,他们必须通过基本身份验证。如果您有任何其他 IP 地址,您可以轻松访问该网站(包括代理)
//1400 rules....
SetEnvIf Remote_Addr 222.249.128.0/19 china
SetEnvIf Remote_Addr 222.249.160.0/20 china
SetEnvIf Remote_Addr 222.249.176.0/20 china
AuthType Basic
AuthName "Restricted"
AuthUserFile /www/passwd/users
Require valid-user
Order allow,deny
Allow from All
Deny from env=china
Satisfy any
答案1
只需添加“允许来自 myiprange”或“允许来自 myinternalnetwork.com”。“满足任何”将需要有效用户或允许来自。
答案2
通常,默认配置对每个人都具有不受限制的访问权限
<Directory "/home/web/htdocs">
Order allow,deny
Allow from all
</Directory>
然后,您必须强制对受限区域进行身份验证,方法是拒绝所有子网,然后仅允许那些子网,然后满足它们实际如何进行身份验证的任何要求。满足所有条件是为了确保两个都需要访问政策。
<Directory "/home/web/htdocs/restricted">
Order Deny,Allow
Deny from all
Allow from 58.240.0.0/15
Allow from 58.242.0.0/15
Require valid-user
Satisfy all
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /home/web/.htpasswds/.htpasswd
Require valid-user
</Directory>
警告!
每次我认为我理解了身份验证的工作规则时,我都必须反复摆弄配置,直到我弄清一些细微差别。仅将此用作起点。重新阅读有关 mod_auth 和 mod_access 的 apache 文档,特别注意 Order 指令。答案就在这里。
希望这会有所帮助,如果您的工作示例与此不符,请发布它,因为这是 Apache 食谱中非常好的菜谱。
- 编辑 -
经过上述测试,我们发现除了该IP地址的用户之外,其他所有人都禁止进入限制区域,并且必须提供身份验证。
从您的问题中无法明确得知其他 IP 的用户是否需要不受限制地访问这个“限制区域”,还是只是被禁止访问?
答案3
这是我用来允许所有用户、拒绝来自中国的用户并提示密码的代码:
AuthType Basic
AuthName "Restricted"
AuthUserFile /home/.htpasswds/.htpasswd
Require valid-user
Order Allow,Deny
Allow from all
deny from 58.14.0.0/15
....
deny from 222.249.192.0/18
satisfy any