我目前正在使用htaccess弹出窗口保护我的管理员,但我为自己的IP添加了白名单。这很有效:
<If "%{REMOTE_ADDR} != '84.x.x.x'">
AuthGroupFile /dev/null
AuthType Basic
AuthUserFile /home/x/domains/my.x.com/.htpasswd/public_html/x/.htpasswd
AuthName "no public access"
require valid-user
ErrorDocument 401 "Unauthorized Access"
</If>
现在还有两个我希望列入白名单的地方。不幸的是,我无法弄清楚添加多个IP的语法。大多数示例似乎使用较旧的语法而没有if语句。
有谁知道我如何重写此代码以包含2个额外的IP?
答案 0 :(得分:0)
我认为你想要使用&#39; IN&#39;运营商: 你可以在这里找到一些例子:
https://httpd.apache.org/docs/2.4/en/expr.html
settings/tools/file watchers
答案 1 :(得分:0)
我找到了另一种解决方案:
Order deny,allow
Deny from all
AuthName "no public access"
AuthUserFile /home/x/domains/my.x.com/.htpasswd/public_html/test/.htpasswd
AuthType Basic
Require valid-user
ErrorDocument 401 "Unauthorized Access"
#location1
Allow from 84.x.x.x
#location2
Allow from 185.x.x.x
Satisfy Any
它使用完全不同的语法,因此这不是我原始问题的100%答案。但是,它允许在受密码保护的目录中将多个IP列入白名单。
答案 2 :(得分:0)
抱歉新帐号/因此无法在正确答案中添加评论。
以前的答案中只有一个错误。因为Magistar想要捕获,如果不是那些IP的Félicien的回答应该是(注意!):
# Check a HTTP header for a list of values
<If "! %{HTTP:REMOTE_ADDR} in { '84.x.x.x', '85.x.x.x' } ">
Header set matched true
</If>
此外,如果你想使用单个表达式,你应该需要&amp;&amp;(AND)而不是||(OR):
<If "!(%{REMOTE_ADDR} = '84.x.x.x' && %{REMOTE_ADDR} = '85.x.x.x')">
它可能没有用的原因是因为整个表达式应该在一个大的双引号被阻止之间。
我确实发现Félicien的答案更多 neat 然后是多个表达式。
答案 3 :(得分:0)
这可以使用基于正则表达式的比较来实现:
<If "! %{REMOTE_ADDR} =~ m#(85.x.x.x)|(86.x.x.x)#">
这允许将地址与提供巨大灵活性的模式进行比较。