.htaccess / .htpasswd绕过某个IP地址

时间:2012-05-02 18:30:31

标签: .htaccess apache2 http-basic-authentication

是否可以为给定目录设置.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)提供密码,但其他人都这样做?

6 个答案:

答案 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