30

我正在尝试对目录进行密码保护,并且目录中有两个文件应该对其进行密码保护:

  • .htaccess
  • .htpasswd

访问:

###Contents of .htaccess:
AuthUserFile /var/www/html/path/to/my/directory/.htpasswd
AuthName "Protected Files"
AuthType Basic
Require user admin

密码:

###Contents of .htpasswd
admin:oxRHPuqwKiANY

密码也是admin,但无论我尝试什么密码,它总是错误的。它立即再次要求输入密码!

这个配置有什么问题?

4

9 回答 9

30

这个问题几乎总是因为 apache 无法读取 .htpasswd 文件。有四个原因浮现在脑海中:

  1. 它没有正确解析路径...您是如何创建 .htaccess 文件的?它是否有 unix 行尾(相对于在 Windows 中使用记事本?

  2. 路径正确吗?以下命令(带有路径更新)显示了什么?ls -l /var/www/html/path/to/my/directory/.htpasswd

  3. Web 服务器是否有权访问该文件?chmod 644 看看是否能解决问题。

  4. 它无法解析 .htpasswd 文件:在这种情况下,您使用的是 crypt() 加密,因此看起来您确实在 Linux 上创建了该文件,并且可能没问题。某些类型的加密仅适用于某些平台,如果有疑问,请尝试切换到 MD5。

您可能会在 Apache 错误日志中找到有用的消息。

我的钱在#3。

于 2012-04-05T07:14:17.380 回答
26

我在使用 MAMP 时遇到了类似的问题,这是因为我是手动创建 .htpasswd 的。解决方案是在终端中使用htpasswd命令:

htpasswd -bc .htpasswd someuser somepass

这创建了 .htpasswd 文件,该文件适用于我的 .htaccess 文件,如下所示:

AuthType Basic
AuthName "This site is in alpha and requires a password."
AuthUserFile "/Applications/MAMP/htdocs/mywebsite/.htpasswd"
require valid-user
于 2014-12-10T23:29:32.067 回答
6

您看到来自父文件夹的密码保护的可能性很小,而不是您期望的文件夹。

如果您的 /etc/apache2/sites-enabled 文件夹中只有一个文件,请检查它是否有您的站点文件夹的部分,例如:

<Directory /var/www/mysite.com>
   AllowOverride All
</Directory> 

否则,如果它有您的站点名称的文件,例如:

/etc/apache/sites-enabled/YOUR_SITE_NAME_HERE.conf

改为编辑该文件,并确保有一个

AllowOverride All

在那里。这是重要的部分!如果您只想允许最小值,请指定:

AllowOverride AuthConfig

反而。

于 2013-06-27T01:26:26.990 回答
3

我的问题是我没有给出 AuthFile 行的绝对路径。

于 2016-06-17T23:48:42.323 回答
2

我有同样的问题。原来问题是这一行:

需要用户管理员

如果您指定,即使文件中有其他用户,admin您也只能访问该目录。admin.htpasswd

如果要在.htpasswd文件中指定用户,可以将行更改为:

需要有效用户

于 2015-07-07T08:05:20.087 回答
1

我遇到过同样的问题。

  • 密码应具有指定的加密:

CRYPT_STD_DES - 基于标准 DES 的哈希,带有来自字母“./0-9A-Za-z”的两个字符的盐。

function standard_salt(){
$a = array_merge(range(0,9),range('a','z'),range('A','Z'));
return (string) $a[rand(0,count($a)-1)].$a[rand(0,count($a)-1)];
}

echo(crypt("admin",standard_salt()));

例子:

admin:dsbU.we73eauE

Onlione javascript 编码器也可用。

如果它仍然不起作用,请注意以下事项:

  • 使用unix 换行符
  • 使用正确的 AuthUserFile 路径,您可以使用:echo $_SERVER['DOCUMENT_ROOT'];
  • 设置文件可读:chmod(".htpasswd",0644);
于 2013-04-15T12:17:06.570 回答
0

此外,请确保您的密码文件是 ANSI 编码的。

于 2013-10-05T15:35:27.880 回答
0

利用

htpasswd -b .htpasswd admin admin

从命令行使用密码。

于 2019-10-16T09:53:14.927 回答
0

我花了大约 2 个小时来解决同样的问题。但问题出在 nginx 中。我有 nginx 作为前端 Web 服务器,并且有一行用于代理配置:

proxy_set_header 授权 "";

它覆盖了授权字段,并且 apache 不接收输入的登录名和密码。

我刚刚注释掉了这一行,它起作用了。

于 2015-10-14T07:55:13.923 回答