.htaccess / .htpasswd 绕过,如果在某个 IP 地址



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

对于版本 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

如果你使用 apache>=2.4,它会是这样的:

<If "%{REMOTE_ADDR} != '127.0.0.1'">
  AuthType Basic
  AuthName "restricted area"
  AuthUserFile /path/to/.htpasswd
  require valid-user
</If>

有关更多信息,请查看文档。

我正在运行 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进入没有密码,其余的必须输入密码才能进入。

Apache 2.4 兼容:

AuthType Basic
AuthUserFile /www/.htpasswd
AuthName "Protected Area"
<RequireAny>
    Require ip 1.2.3.4
    Require valid-user
</RequireAny>

有关更多示例,请参阅迁移指南从 2.2 升级到 2.4。

如果你使用 apache>=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>

除了 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

最新更新