.htaccess/.htpasswd 500 内部服务器错误



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

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

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

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

   tim:blah

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

最有可能的问题是这一行:

AuthUserFile /.htpasswd 

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

AuthUserFile /var/www/.htpasswd 

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

echo $_SERVER['DOCUMENT_ROOT'];

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

if (isset($_SERVER['PHP_AUTH_USER'], $_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');
    }
}

权限也可能导致此问题。

确保 Web 服务器用户可读取.htpasswd

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

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

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

AuthUserFile "/var/www/somewhere/.htpasswd"

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

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

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

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

我在 Apache/2.4.6 (CentOS) 上遇到了同样的问题。

事实证明,Apache有一些错误(https://bz.apache.org/bugzilla/show_bug.cgi?id=54735),您需要像这样从控制台设置密码:

htpasswd -nb username newpassw > <path-to>/.htpasswd

在 .htaccess 中解决删除引号"并为 AuthUserFile 写入完整路径,然后它将起作用。

在 xampp 上测试

AuthName "Restricted Area" 
AuthType Basic 
AuthUserFile C:/xampp/htdocs/.htpasswd 
AuthGroupFile /
Require valid-user

.htpasswd

foo:bar

最新更新