Apache htaccess身份验证通过。cname

Apache htaccess身份验证通过。cname,apache,.htaccess,Apache,.htaccess,我需要一个.htaccess规则,当您从cname:xxx.example.com来时,该规则不会要求输入密码,但我无法让它工作 我的实际.htaccess文件如下所示: AuthType Basic AuthName “Entwurf“ AuthUserFile /my/path/to/.htpasswd Require valid-user Order deny,allow Deny from all Allow from 11.22.33.44 Satisfy any 我试过这个: Au

我需要一个
.htaccess
规则,当您从cname:
xxx.example.com
来时,该规则不会要求输入密码,但我无法让它工作

我的实际
.htaccess
文件如下所示:

AuthType Basic
AuthName “Entwurf“
AuthUserFile /my/path/to/.htpasswd
Require valid-user
Order deny,allow
Deny from all
Allow from 11.22.33.44
Satisfy any
我试过这个:

AuthType Basic
AuthName “Entwurf“
AuthUserFile /my/path/to/.htpasswd
Require valid-user
Order deny,allow
Deny from all
Allow from 11.22.33.44
Allow from xxx.example.com
Satisfy any
但它仍然要求输入密码


我希望有人能帮上忙。

通过CNAME,似乎您实际上指的是所请求的主机名。(我们将使用的主机名。)

因此,任何请求
xxx.example.com
的人都可以不受限制地访问或使用IP地址
11.22.33.44
的客户端,而不管他们请求的主机名是什么(假设您提供的是多个主机名)

这将检查发出请求的客户端的已解析主机名-这不是一回事。(为了在此处获取主机名,需要服务器对客户端的IP地址进行DNS查找-在某些共享服务器上禁用此功能,因为它会增加服务器上的额外开销)。对于大多数用户来说,这只是指他们访问互联网的ISP

另外,
Order
Deny
Allow
指令是Apache2.2指令。如果您使用的是Apache2.4,那么您可能应该使用
Require…
指令。除非您要维护与仍然使用旧的Apache2.2指令的服务器的向后兼容性(这两个指令不应该混合使用)

在Apache 2.4上,您可以使用Apache表达式。。。因此,只有当客户端的IP不是
11.22.33.44
xxx.example.com
不是被请求的主机时,才使用HTTP身份验证

例如:

<If "%{HTTP_HOST} != 'xxx.example.com' && %{REMOTE_ADDR} != '11.22.33.44'">
    AuthType Basic
    AuthName "Entwurf"
    AuthUserFile /my/path/to/.htpasswd
    Require valid-user
</If>

AuthType Basic
AuthName“Entwurf”
AuthUserFile/my/path/to/.htpasswd
需要有效用户

您似乎还在
AuthName
指令中使用了卷曲引号-可能这只是您问题中的一个格式问题?

您使用的是什么版本的Apache?@MrWhite我使用的是Apache 2.4I CNAME假设您指的是请求的主机名?否则,通过CNAME,你到底指的是什么?(你看不到这里的DNS CNAME是什么。(?)@MrWhite是的,对不起,我是这个意思。
<If "%{HTTP_HOST} != 'xxx.example.com' && %{REMOTE_ADDR} != '11.22.33.44'">
    AuthType Basic
    AuthName "Entwurf"
    AuthUserFile /my/path/to/.htpasswd
    Require valid-user
</If>