60

我正在使用.htaccess 阻止一个文件夹,这是我以前从未使用过的,我遇到了一些麻烦。这就是我所拥有的

.htaccess(位于我想要阻止的文件夹中):

AuthName "Username and password required"
AuthUserFile /.htpasswd 
Require valid-user
AuthType Basic

.htpasswd(位于根目录,密码在实际文件中加密):

   tim:blah

我收到了 500 个内部服务器错误,我不知道为什么。

4

6 回答 6

157

最可能的问题是这一行:

AuthUserFile /.htpasswd 

此行应提供密码文件的完整文件系统路径,例如

AuthUserFile /var/www/.htpasswd 

要发现您的文件系统路径,您可以创建一个 PHP 文档,其中包含

echo $_SERVER['DOCUMENT_ROOT'];

于 2013-09-27T21:54:43.553 回答
11

如果没有任何帮助并且您正在使用 PHP,您可以通过将其放入您的 index.php(顶部)来使其工作:

if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
    if ($_SERVER['PHP_AUTH_USER'] != 'user' || 
        $_SERVER['PHP_AUTH_PW'] != 'pass') {

        header('WWW-Authenticate: Basic realm="Protected area"');
        header('HTTP/1.0 401 Unauthorized');

        die('Login failed!');
    }
}
于 2014-12-05T20:11:21.267 回答
3

权限也可能导致此问题。

确保.htpasswdWeb 服务器用户可以读取。

例如,如果您使用 nginx,请检查nginx.conf以找出服务器用户是什么,如果您使用 Apache,您可以通过这种方式找到它,等等。

然后将正确的所有者和读取权限设置为.htpasswd

于 2014-09-19T23:22:33.593 回答
3

如果你看到500 Internal Server error这些天 - 这主要是因为在较新的 Apache 版本中,路径AuthUserFile必须放在里面quotation marks

AuthUserFile "/var/www/somewhere/.htpasswd"
于 2020-09-11T10:39:38.133 回答
0

我还要补充一点,在某些 Web 主机上,如果将 .htpasswd 文件放置在可公开访问的区域中,该文件将无法工作。我最近的一次安装证实了这一点。正如其他人所指出的,最好将其放在站点的根目录中。

于 2015-05-26T06:34:50.557 回答
0

有同样的问题,它与访问有关!您是否通过以下方式将密码文件的所有权授予www-data用户

chown www-data /var/www/.htpasswd
chmod 640 /var/www/.htpasswd

? 出于显而易见的原因,最好保留密码,以将密码保存在/var/www/目录之外的某个位置,假设/home/MYSERVER/在这种情况下,您还需要将此父目录的所有权授予 user www-data

于 2019-06-18T16:40:41.093 回答