htaccess无法正常工作 - 密码总是错误的

时间:2012-04-04 16:11:02

标签: .htaccess login password-protection .htpasswd

我正在尝试密码保护目录,并且目录中有两个文件应该用密码保护它:

  • 的.htaccess
  • htpasswd的

htaccess的:

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

HTPASSWD:

###Contents of .htpasswd
admin:oxRHPuqwKiANY

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

此配置有什么问题?

9 个答案:

答案 0 :(得分:27)

这个问题几乎总是因为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。

  5. 您可以在Apache错误日志中找到有用的消息。

    我的钱在#3上。

答案 1 :(得分:16)

我有一个类似的问题使用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

答案 2 :(得分:5)

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

如果您的/ 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

代替。

答案 3 :(得分:2)

我遇到了同样的问题。原来问题是这一行:

  

要求用户管理

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

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

  

需要有效用户

答案 4 :(得分:1)

我的问题是我没有为AuthFile行提供绝对路径。

答案 5 :(得分:0)

我遇到了同样的问题。

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 encripter is also available.

如果仍然无效,请注意以下事项:

  • 使用unix linebreaks
  • 使用正确的AuthUserFile路径,您可以使用:echo $_SERVER['DOCUMENT_ROOT'];
  • 获取它
  • 设置文件可读:chmod(".htpasswd",0644);

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

proxy_set_header授权&#34;&#34;;

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

我刚评论了这一行,但它确实有效。

答案 8 :(得分:0)

使用

htpasswd -b .htpasswd admin admin

从命令行使用密码。