htaccess 不起作用 - 密码总是错误

问题描述 投票:0回答:11

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

  • .htaccess
  • .htpasswd

HT访问:

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

HT密码:

###Contents of .htpasswd
admin:oxRHPuqwKiANY

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

这个配置有什么问题吗?

.htaccess authentication password-protection .htpasswd
11个回答
31
投票

这个问题几乎总是因为apache无法读取.htpasswd文件。我想到的有四个原因:

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

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

  3. 网络服务器是否有权访问该文件? chmod 644 看看是否可以解决问题。

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

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

我的钱在#3。


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

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

相反。


4
投票

我也有同样的问题。原来问题出在这一行:

需要用户管理员

如果指定

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

如果您想在

.htpasswd
文件中指定用户,您可以将该行更改为:

需要有效用户


3
投票

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


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

在线 javascript 编码器 也可用。

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

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

0
投票

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


0
投票

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

proxy_set_header 授权“”;

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

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


0
投票

使用

htpasswd -b .htpasswd admin admin

从命令行使用密码。


0
投票

另外,如果你像我一样心不在焉,请确保你有一些内容要显示,比如目录中的一些index.html文件。否则,看起来像是身份验证失败,而只是服务器不允许显示目录列表。


0
投票

由于存在多个问题,我花了几个小时试图让它工作。

  1. 令我惊讶的是我必须使用AuthUserFile的相对路径,如下所示:
AuthUserFile ../.htpasswd # f.ex. one directory up
  1. 我的 .htaccess 的结构必须不同,我不知道为什么,因为我没有在任何地方看到这样写的:
AuthType Basic
AuthName "Login"
AuthUserFile ./.htpasswd # current directory

<Files "wp-login.php">
  Require valid-user
</Files>
  1. 必须对
    .htpasswd
    文件进行文件权限 644
  2. 仅当.htpasswd使用
    crypt()
    算法加密时才有效
© www.soinside.com 2019 - 2024. All rights reserved.