.htaccess 和 httpd.conf 中的 HTTP 身份验证均被忽略

.htaccess 和 httpd.conf 中的 HTTP 身份验证均被忽略

我最近发现,我本地计算机(Windows 10/Apache 2.4)上的一些开发网站在网络上是可见的,但实际上它们不应该可见。这个问题类似于这个问题,但由于那里没有提供任何解决方案(该帖子中提出的所有问题都已核对并被证实是正确的),所以我提出了自己的问题。以下是相关文件中的相关摘录:

httpd.conf:

# directory and file names obfuscated intentionally
<Directory "P:/HTTP/{hidden}"> 
  AllowOverride All
  AuthType Basic
  AuthName "Private Content - Authorized Use Only"
  AuthUserFile P:/.htpasswd
  Require valid-user
</Directory>

.htaccess(位于 P:/http/{hidden})

  AuthType Basic
  AuthName "You must log in to view this site."
  AuthUserFile P:/.htpasswd
  Require valid-user

(注意:为了协助调试,每个 AuthName 条目的设置都不同)

我知道 .htaccess 文件正在被处理,因为如果我添加一行会导致错误,则会发生该错误,但是当没有发生错误时,我仍然不会看到 HTTP 身份验证登录。该网站就这样出现了。这发生在我尝试访问该网站的每台计算机上,而不仅仅是我的本地计算机。我的日志文件中没有错误条目(除了由 .htaccess 中的垃圾行生成的故意 HTTP 500 错误),AllowOverride设置为ALL,如上面的摘录所示,自从我上次进行安全测试(大约 2 个月前)以来,Apache 没有任何变化。系统中唯一的变化是通过对 Windows 的更新,但这应该与这个问题无关。

有趣的是,在同一台计算机上,我有几个虚拟机,它们都使用不同的 OS/Apache 版本,并且都指向同一个文档根目录(本地机器上的 SAMBA 共享),并且都在各自的 Apache 配置文件中具有相似(或相同)的条目,并且它们都有效。只是Win10宿主机有这个问题。

如有任何建议或线索,我们将不胜感激。

答案1

这就是我的.htaccess文件的样子(Apache 2.2)

AuthName "FBI only"
AuthUserFile /etc/apache2/htpasswd-mysite
AuthType basic
Require valid-user
Order Deny,Allow
Deny from all
Allow from Ip.addr.here
Satisfy Any

当从那里访问我的网站时Ip.addr.here不需要密码。

在 apache 配置文件中我有

<Directory "/var/www/vhosts/site/www">
     Options            Indexes FollowSymLinks
     AllowOverride      All
     Order              allow,deny
     Allow              from all
</Directory>

因此,尝试将这些行添加到 htaccess 文件中

Order Deny,Allow
Deny from all

编辑

请参见 http://www.the-art-of-web.com/system/apache-authorization/

来自该链接:

如果您正在使用旧版授权指令升级服务器,则可以通过在 Apache 中启用(默认情况下应激活)mod_access_compat 来使它们快速工作:sudo a2enmod access_compat

根据您的情况,查看是否启用了该模块。

这里有有用的信息。 https://www.digitalocean.com/community/tutorials/migrating-your-apache-configuration-from-2-2-to-2-4-syntax

编辑2

请参阅此相关问题并检查 apache 日志文件!

答案2

在遵循了给出的所有建议(感谢大家的建议)、回答了在这里和其他地方发布的问题,并且总体上因沮丧而拔掉的头发比我能承受的还要多之后,我最后找到了问题的原因,从而找到了解决方案。原来,祖先文件夹中还有另一个 .htaccess 文件允许访问所有子文件夹,而这个“上游” .htaccess 文件覆盖了我试图进行更改的文件中的设置。这对我来说似乎很奇怪,但注释掉祖先 .htaccess 中的设置会导致另一个文件开始按预期工作。

这里的底线是,如果您的 .htaccess 文件没有按计划工作,请查看父文件夹以查看另一个文件是否有不同的设置。

相关内容