我目前正在使用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?
我想您想使用'in'operator:您可以在这里找到一些示例:
https://httpd.apache.org/docs/2.4/en/expr.html
# Check a HTTP header for a list of values
<If "%{HTTP:X-example-header} in { 'foo', 'bar', 'baz' }">
Header set matched true
</If>
我找到了一种替代解决方案:
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列入白色。
对不起新帐户/因此无法在正确答案中添加注释。
先前的答案中只有一个错误。由于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>
此外 <If "!(%{REMOTE_ADDR} = '84.x.x.x' && %{REMOTE_ADDR} = '85.x.x.x')">
它可能没有起作用的原因是,整个表达式应该在一个大引用的大引用之间。
我确实找到了félicien的答案,然后再整洁,然后多个表达式。
可以使用基于正则表达式比较来实现这一点:
<If "! %{REMOTE_ADDR} =~ m#(85.x.x.x)|(86.x.x.x)#">
这允许将地址与具有巨大灵活性的模式进行比较。