【问题标题】:.htaccess/.htpasswd 500 Internal Server Error.htaccess/.htpasswd 500 内部服务器错误
【发布时间】:2013-09-27 21:46:38
【问题描述】:

我正在使用 .htaccess 阻止一个文件夹,这是我以前从未使用过的,我遇到了一些麻烦。这就是我所拥有的

.htaccess(位于我要阻止的文件夹中):

AuthName "Username and password required"
AuthUserFile /.htpasswd 
Require valid-user
AuthType Basic

.htpasswd(位于root,密码在实际文件中加密):

   tim:blah

我收到了 500 个内部服务器错误,我不知道为什么。

【问题讨论】:

  • 你知道/.htpasswd是什么,/home/youraccout/public_html中的一个文件或者实际上位于文件系统主目录/的文件?
  • 你的 apache 错误日志是怎么说的?
  • 我无法通过我的主机访问错误日志 =( 并且我的 .htpasswd 文件位于我可以访问的最上面的文件夹中,它不在我的 pubic_html 文件夹中

标签: apache .htaccess


【解决方案1】:

最可能的问题是这一行:

AuthUserFile /.htpasswd 

此行应提供密码文件的完整文件系统路径,例如

AuthUserFile /var/www/.htpasswd 

要发现您的文件系统路径,您可以创建一个包含

的 PHP 文档

echo $_SERVER['DOCUMENT_ROOT'];

【讨论】:

  • 还要确保.htpasswd 不能被群组和其他人写入。
  • 找到主路径。我的主人对我隐瞒了重要信息。谢谢。
  • 谢谢!就我而言,echo getcwd(); 给了我(错误的)相对路径。 echo $_SERVER['DOCUMENT_ROOT']; 效果很好!
  • 好的,伙计们,这行得通:我打开了身份验证窗口并登录,但随后出现内部服务器错误。于是我用了绝对路径,解决了。但是,为了记录,这太可怕了!我不能再把这个文件放在git repo 中,因为我不能使用相对路径。感谢奥巴马,感谢特朗普! (放松,一点政治幽默:)
  • 使用回显功能和设置文件路径解决了内部服务器错误问题。它有效!
【解决方案2】:

如果你最近看到500 Internal Server error - 这主要是因为在较新的 Apache 版本中,AuthUserFile 中的路径必须放在 quotation marks 中。

AuthUserFile "/var/www/somewhere/.htpasswd"

【讨论】:

  • 适合我
【解决方案3】:

如果没有任何帮助,并且您正在使用 PHP,您可以通过将其放入您的 index.php(顶部)来使其工作:

if (isset($_SERVER['PHP_AUTH_USER']) && isset($_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!');
    }
}

【讨论】:

    【解决方案4】:

    权限也可能导致此问题。

    确保网络服务器用户可以读取.htpasswd

    例如,如果你使用 nginx 检查nginx.conf 来找出服务器用户是什么,如果你使用 Apache 你可以找到它this way 等等。

    然后将权限所有者和读取权限设置为.htpasswd

    【讨论】:

      【解决方案5】:

      我还要补充一点,在某些 Web 主机上,如果将 .htpasswd 文件放在可公开访问的区域,则该文件将无法工作。我最近的一次安装证实了这一点。正如其他人所指出的,最好将其放在站点的根目录中。

      【讨论】:

      • "...最好将其放在站点的根目录中" - 您的最后一句话似乎与您的第一句话相矛盾(假设“根”您的意思是 文档根 )?正如您所建议的,理想情况下,此文件应位于可公开访问的区域之外。例如。 文档根目录之上。
      【解决方案6】:

      有同样的问题,它与访问有关!您是否通过

      将密码文件的所有权授予www-data 用户
      chown www-data /var/www/.htpasswd
      chmod 640 /var/www/.htpasswd
      

      ?出于显而易见的原因,最好保留密码,将密码保存在/var/www/ 目录之外的某个位置,比如/home/MYSERVER/,在这种情况下,您还需要将此父目录的所有权授予用户www-data

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-22
        • 2017-04-05
        • 1970-01-01
        • 2013-02-06
        • 2015-06-28
        • 2016-04-20
        • 2014-01-01
        相关资源
        最近更新 更多