我最近发现,我本地计算机(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
根据您的情况,查看是否启用了该模块。
编辑2
请参阅此相关问题并检查 apache 日志文件!
答案2
在遵循了给出的所有建议(感谢大家的建议)、回答了在这里和其他地方发布的问题,并且总体上因沮丧而拔掉的头发比我能承受的还要多之后,我最后找到了问题的原因,从而找到了解决方案。原来,祖先文件夹中还有另一个 .htaccess 文件允许访问所有子文件夹,而这个“上游” .htaccess 文件覆盖了我试图进行更改的文件中的设置。这对我来说似乎很奇怪,但注释掉祖先 .htaccess 中的设置会导致另一个文件开始按预期工作。
这里的底线是,如果您的 .htaccess 文件没有按计划工作,请查看父文件夹以查看另一个文件是否有不同的设置。