Apache Basic 身份验证具有多个 IP 条件,可与此配合使用方式,但根据这里,我应该能够写出类似这样的.htaccess
示例(下面的 IP 地址是为了回答问题而写的):
<If "%{REMOTE_ADDR} != '1.1.1.1' || %{REMOTE_ADDR} != '8.8.8.8' || %{REMOTE_HOST} != 'example.com'">
AuthType Basic
AuthName "restricted area"
AuthUserFile /home/user/.htpasswd
require valid-user
</If>
||
但当我添加多个地址并使用或等时,它不起作用 &&
……事实上,Apache2 要求从上述 IP 登录,即使它们应该被允许。但如果我只写其中一个,Apache 允许无需登录即可访问。
我做错了什么?
答案1
嗯,这是个逻辑问题。不过你没有清楚地表达出预期的结果。所以我只是猜测而已。
假设你想要这个:
- domain=example => ok(无密码)
- 地址=1... => 确定(无密码)
- 地址=8... => 确定(无密码)
- 其他 => 不行(需要密码)
你只需要专注于“ok”部分。对所有这些条件都成立的表达式是
a=1 || a=8 || d=example
现在,在这种情况下你什么都不需要做,但对于所有其他情况,你需要做一些事情(询问密码),所以你必须逆转测试。所需的表达式变成
not (a=1 || a=8 || d=example)
开发not (a=1 || a=8 || d=exampe)
可以(not (a=1)) && (not (a=8)) && (not d=example))
简化为a!=1 && a!=8 && d!=example
那么,尝试一下这个:
<If "%{REMOTE_ADDR} != '1.1.1.1' && %{REMOTE_ADDR} != '8.8.8.8' && %{REMOTE_HOST} != 'example.com'">
AuthType Basic
AuthName "restricted area"
AuthUserFile /home/user/.htpasswd
require valid-user
</If>