受密码保护的目录 [cPanel] - 没有收到登录提示和错误 401

Password Protected Directory [cPanel] - Receiving no Login Prompt and Error 401

我在我的网站上为 302、401、403、404 和 500 HTTP 错误代码设置了自定义错误页面。五个自定义错误页面文件存储在主目录中。

我还想用密码保护特定目录,并尝试使用 cPanel 的 "Password Protect Directories" 功能来实现。

我还应该提到,在主目录中,有一个 .htaccess 文件,内容如下:

<limit GET POST PUT>
order deny,allow
allow from all
</limit>

Options -Indexes

ErrorDocument 302 /302.php
ErrorDocument 401 /401.php
ErrorDocument 403 /403.php
ErrorDocument 404 /404.php
ErrorDocument 500 /500.php

有了这个,我现在可以解释这个设置当前发生了什么。本质上,受密码保护的页面不会提示输入用户名和密码,而是直接进入 401.php 错误页面。

我试过将错误页面移动到它们自己的目录,/error/,我试过使用 cPanel 自己的错误页面设置工具(使用 .shtml 文件),并且我已经还尝试了 cPanel 的错误页面和我自己的组合。

根据我的测试,cPanel 的 .shtml 错误页面似乎可以工作,但它们很丑陋并且与网站的主题不匹配。我制作的错误页面,使用 PHP 来要求主题文件,以及回显用户请求的 URL.

即使在我重新上传主目录的 .htaccess 文件之后,我似乎也有两组错误页面的组合工作,但是在删除 cPanel 制作的那组后,一切又坏了。我也不知道使用两组错误页面是否是一个好习惯,如下:

<HOME_DIR>
--- <DIR>
    --- .htaccess (contains code for password protection)
    --- index.php
--- .htaccess (links to PHP error pages)
--- 302.php
--- 302.shtml
--- 401.php
--- 401.shtml
--- 403.php
--- 403.shtml
--- 404.php
--- 404.shtml
--- 500.php
--- 500.shtml
--- index.php

这是我以前从未体验过的。据我所知,问题出在主目录下的 .htaccess 文件,但我不是 100% 确定。

最后,这是我设置密码保护时 cPanel 创建的 .htaccess 文件(注意:“”和“

”已用于隐私保护):

AuthType Basic
AuthName "Authentication Required"
AuthUserFile "/home/<USER>/.htpasswds/public_html/<DIR>/passwd"
require valid-user

顺便说一下,这是一个 Apache 服务器。非常感谢任何建议。

临时重命名您添加了 ErrorDocument 规则的 .htaccess 文件,然后清除浏览器缓存和 cookie。现在尝试访问您的受密码保护 URL。如果有效,请复制您的 ErrorDocument 代码并将其添加到密码保护规则之后。

间接解

看来我必须将错误页面文件从 .php 格式转换为 .shtml 格式。除此之外,所有 PHP require 语句都已被删除,取而代之的是普通的 HTML (因为我无法让它们工作,即使使用 SSI 的 #include 语句也是如此),最后,我不得不将 PHP echo 替换为请求的 URL 以支持 SSI #echo.

对于这样一件平凡的事情,这是不必要的工作。我不知道为什么 PHP 与受密码保护的目录冲突。以前从未发生过这种情况,因为我过去使用过 PHP 个错误页面。一定是PHP和密码保护有什么冲突。

好吧,不管怎样,有一个 'solution'。