我正在尝试对目录进行密码保护,并且该目录中有两个文件应该对其进行密码保护:
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,但是无论我尝试什么密码,总是错误。它立即再次要求输入密码!
这个配置有什么问题吗?
这个问题几乎总是因为apache无法读取.htpasswd文件。我想到的有四个原因:
它没有正确解析路径...您是如何创建 .htaccess 文件的?它是否有 Unix 行结尾(与在 Windows 中使用记事本相比?
路径正确吗?以下命令(带有路径更新)显示什么? ls -l /var/www/html/path/to/my/directory/.htpasswd
网络服务器是否有权访问该文件? chmod 644 看看是否可以解决问题。
它无法解析 .htpasswd 文件:在这种情况下,您正在使用 crypt() 加密,因此看起来您确实在 Linux 上创建了该文件,并且可能没问题。某些类型的加密仅适用于某些平台,如果有疑问,请尝试切换到 MD5。
您可能会在 Apache 错误日志中找到有用的消息。
我的钱在#3。
我在使用 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
您很有可能会看到来自父文件夹的密码保护,而不是您期望的文件夹。
如果您的 /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
相反。
我也有同样的问题。原来问题出在这一行:
需要用户管理员
如果指定
admin
,即使 admin
文件中有其他用户,也只能使用 .htpasswd
访问该目录。
如果您想在
.htpasswd
文件中指定用户,您可以将该行更改为:
需要有效用户
我的问题是我没有给出 AuthFile 行的绝对路径。
我也有同样的问题。
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 编码器 也可用。
如果仍然不起作用,请注意以下事项:
echo $_SERVER['DOCUMENT_ROOT'];
chmod(".htpasswd",0644);
另外,请确保您的密码文件是 ANSI 编码的。
我花了大约2个小时来解决同样的问题。但问题出在 nginx 上。 我有 nginx 作为前端 Web 服务器,并且有一行用于代理配置:
proxy_set_header 授权“”;
它会覆盖授权字段,并且 apache 不会接收输入的登录名和密码。
我刚刚注释掉了这一行并且它起作用了。
使用
htpasswd -b .htpasswd admin admin
从命令行使用密码。
另外,如果你像我一样心不在焉,请确保你有一些内容要显示,比如目录中的一些index.html文件。否则,看起来像是身份验证失败,而只是服务器不允许显示目录列表。
由于存在多个问题,我花了几个小时试图让它工作。
AuthUserFile ../.htpasswd # f.ex. one directory up
AuthType Basic
AuthName "Login"
AuthUserFile ./.htpasswd # current directory
<Files "wp-login.php">
Require valid-user
</Files>
.htpasswd文件进行文件权限
644
crypt()
算法加密时才有效