受密码保护的目录 [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'。
我在我的网站上为 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'。