我正在努力用.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