是否可以为给定目录设置.htaccess / .htpasswd访问控制设置,但如果它们来自特定IP地址,则绕过登录/密码身份验证?
我知道你可以在.htaccess文件中执行类似的操作:
order deny,allow
deny from all
allow from 000.000.000.000
但是如果你沿着这些方向添加一些东西:
AuthType Basic
AuthName "restricted area"
AuthUserFile /path/to/.htpasswd
require valid-user
然后它会提示输入密码。有没有办法做if / else类型设置,或其他一些解决方案,以便不会提示用户作为给定的IP(或一组IP)提供密码,但其他人都这样做?
答案 0 :(得分:68)
对于2.2.X版,您可以使用以下内容...
AuthUserFile /var/www/mysite/.htpasswd
AuthName "Please Log In"
AuthType Basic
require valid-user
Order allow,deny
Allow from xxx.xxx.xxx.xxx
satisfy any
显然要替换你的用户文件的路径和你想绕过身份验证的ip地址。
具体细节的进一步说明可在以下网址找到:http://httpd.apache.org/docs/2.2/howto/auth.html
答案 1 :(得分:18)
如果你使用apache> = 2.4,它将是这样的:
<If "%{REMOTE_ADDR} != '127.0.0.1'">
AuthType Basic
AuthName "restricted area"
AuthUserFile /path/to/.htpasswd
require valid-user
</If>
有关详细信息,请查看docs。
答案 2 :(得分:13)
我正在运行Apache / 2.2.16(Debian),遇到类似的问题,我解决了这个问题:
(这可以在.htaccess文件中运行,也可以直接在<Location/>
下的虚拟主机中运行)
Order deny,allow
Deny from all
AuthType Basic
AuthUserFile /home/somesite/.htpasswd
AuthName "No entry, unless"
Require Valid-user
Allow from x.x.x.x
Allow from x.x.x.x
Satisfy Any
我允许从两个不同的ip输入无密码,其余的必须输入密码才能输入。
答案 3 :(得分:5)
如果您使用apache&gt; = 2.4,并且您想要允许一组IP,如初始问题中所述,您可以这样做:
<If "-R '192.168.0.0/24'">
Require all granted
</If>
<ElseIf "-R '192.168.1.0/24'">
Require all granted
</ElseIf>
<Else>
AuthType Basic
AuthName "restricted area"
AuthUserFile /etc/apache2/.htpasswd
require valid-user
</Else>
答案 4 :(得分:3)
与Apache 2.4兼容:
AuthType Basic
AuthUserFile /www/.htpasswd
AuthName "Protected Area"
<RequireAny>
Require ip 1.2.3.4
Require valid-user
</RequireAny>
有关更多示例,请参见迁移指南Upgrading to 2.4 from 2.2。
答案 5 :(得分:2)
除了j5Dev的答案:
# Interne IP-Adressen
SetEnvIf Remote_Addr "^127\.0\.0\.1$" IsIntern
SetEnvIf Remote_Addr "^192\.168" IsIntern
# .. add more IP addresses or ranges here
# Authentication, wenn nicht intern
AuthUserFile /path/to/.htpasswd
AuthName "restricted area"
AuthType Basic
require valid-user
Order allow,deny
Allow from env=IsIntern
satisfy any