基本身份验证 Apache 和多个 IP 条件

基本身份验证 Apache 和多个 IP 条件

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>

相关内容