18

我想用密码保护我的网站,但是一旦我添加 .htpasswd 和 .htaccess 文件,我就会收到服务器错误:

内部服务器错误

服务器遇到内部错误或配置错误,无法完成您的请求。

请联系服务器管理员并告知他们错误发生的时间,以及您所做的任何可能导致错误的事情。

服务器错误日志中可能提供有关此错误的更多信息。

这是我正在使用的代码:

.htaccess

AuthType Basic  
AuthName "Top Secret for SongKick eyes only."  
AuthUserFile /webroot/.htpasswd  
require valid-user

.htpasswd

songkick:isS1rCTQE/p8E

我也尝试过AuthUserFile /.htpasswd(即没有“webroot”,这是它似乎在文件管理器中的文件夹的名称),但这也不起作用。

顺便说一句,我正在使用 GoDaddy 托管,如果这有所作为的话。

4

4 回答 4

36

根据AuthUserFile,您必须提供密码文件的完整路径,而不是来自 的相对路径DocumentRoot,如果它是绝对路径(即以斜杠开头)。

AuthUserFile 指令设置一个文本文件的名称,该文件包含用于用户身份验证的用户列表和密码。File-path 是用户文件的路径。如果它不是绝对的,则将其视为相对于ServerRoot

注意ServerRoot不是DocumentRoot

如果DocumentRoot/var/www并且密码文件是/var/www/webroot/.htpasswd,你必须说

AuthUserFile /var/www/webroot/.htpasswd

在您的 .htaccess 文件中。


您可以使用一个小的 PHP 脚本了解绝对路径,例如

<?php
echo "Absolute path: ", getcwd();

把它放在你想要找到 .htpasswd 文件的目录中,然后调用它http://www.example.com/path/to/test.php

完成后不要忘记删除脚本。


也就是说,您不应该将密码文件放在DocumentRoot. 最好把它放在从网络上无法访问的地方,即/etc/apache2/htpasswd或任何适合你的地方。

于 2013-03-18T13:30:49.803 回答
4

我想到了两件事。

  1. .htpasswdWeb 服务器用户是否可读?

  2. 您知道 Apache 是否设置AllowOverride all为允许.htaccess按预期运行?

于 2013-03-18T12:00:41.257 回答
1

所有标准答案(完整路径、正确格式等)都不适合我。经过大量的追查,我发现父文件夹的权限不足,所以即使.htaccess中的路径是正确的,文件的权限是rw-rr,仍然不行,因为父文件夹是rwx-rw- -。在限制对上游文件夹访问的主机上,这可能很难追踪。

于 2014-08-14T02:15:55.413 回答
1

此错误的主要原因是“AuthUserFile”路径。我遇到了同样的问题,我通过进入 cpanel 解决了它。通过保护您在 cPanel 中的文件夹,它会自动检测 htpasswd 文件。

转到 cPanel->密码保护目录->定义目录,然后创建一个用户。希望这对您有所帮助。

于 2015-11-24T11:58:55.190 回答