57

是否可以为给定目录设置 .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 集)的用户不会被提示输入密码,但其他人会?

4

6 回答 6

87

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

于 2012-05-14T13:29:41.777 回答
24

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

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

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

于 2012-05-02T18:41:29.690 回答
16

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

于 2013-10-01T03:16:52.237 回答
12

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 。

于 2018-08-14T08:18:03.523 回答
7

如果您使用 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>
于 2018-01-25T15:28:32.817 回答
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
于 2013-03-12T13:38:44.810 回答