cPanel 自定义 401 错误页面 "Not Displaying"

cPanel Custom 401 Error Page "Not Displaying"

我的问题:

出于某种原因,我的自定义 401 错误页面未在登录时显示,仅显示通用 401 错误页面:

Unauthorized

This server could not verify that you are authorized to access the document requested. 
Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't 
understand how to supply the credentials required.

Additionally, a 401 Unauthorized error was encountered while trying to use an 
ErrorDocument to handle the request.

说到这里,我的自定义 404 错误页面和其他页面显示得很好,只是 401 不行。“error.php”(自定义错误页面)文件在我的 public_html 目录中.

我当前在 public_html 目录中的 .htaccess 文件:

ErrorDocument 400 /error.php
ErrorDocument 401 /error.php
ErrorDocument 402 /error.php
ErrorDocument 403 /error.php
ErrorDocument 404 /error.php
ErrorDocument 500 /error.php
ErrorDocument 501 /error.php
ErrorDocument 502 /error.php
ErrorDocument 503 /error.php
ErrorDocument 504 /error.php
ErrorDocument 505 /error.php
ErrorDocument 506 /error.php
ErrorDocument 507 /error.php
ErrorDocument 510 /error.php

RewriteEngine On

DirectoryIndex .index.php .style.css .sorttable

RewriteRule .*\.(jpg|jpeg|gif|png|bmp|zip|rar)$ - [F,NC]

# php -- BEGIN cPanel-generated handler, do not edit
# Set the “ea-php73” package as the default “PHP” programming language.
<IfModule mime_module>
  AddHandler application/x-httpd-ea-php73 .php .php7 .phtml
</IfModule>
# php -- END cPanel-generated handler, do not edit


#----------------------------------------------------------------cp:ppd
# Section managed by cPanel: Password Protected Directories     -cp:ppd
# - Do not edit this section of the htaccess file!              -cp:ppd
#----------------------------------------------------------------cp:ppd
AuthType Basic
AuthName "Protected 'public_html'"
AuthUserFile "/home/dark/.htpasswds/public_html/passwd"
Require valid-user
#----------------------------------------------------------------cp:ppd
# End section managed by cPanel: Password Protected Directories -cp:ppd
#----------------------------------------------------------------cp:ppd

现在我的目录受密码保护,如您在 .htaccess 中所见。我尝试了以下修复,但仍然无法显示自定义 401 错误页面:

  1. 在不同的目录中创建了错误页面。
  2. 在 .htaccess 文件中指定了错误页面的完整 url。
  3. 关闭目录密码功能
  4. 将错误文件扩展名更改为 .shtml。
  5. 在 Whosebug 网站上尝试了许多其他代码和问题。

现在回顾一下,所有其他自定义错误页面都显示正常,只是登录时不是 401,我很困惑。

我的 cPanel 服务器信息:

Hosting Package Gold
Server Name server
cPanel Version  88.0 (build 14)
Apache Version  2.4.46
PHP Version 7.3.21
MySQL Version   10.3.24-MariaDB-cll-lve
Architecture    x86_64
Operating System    linux
Shared IP Address   45.95
Local IP Address    192.168
Path to Sendmail    /usr/sbin/sendmail
Path to Perl    /usr/bin/perl
Perl Version    5.16.3
Kernel Version  3.10.0-962.3.2.lve1.5.32.el7.x86_64

谢谢!

要提供 401 ErrorDocument,它需要可访问。如果 一切 都被 HTTP 身份验证阻止,那么当身份验证失败时将无法访问它,并且您会在默认服务器 401 响应中获得附加部分:

Additionally, a 401 Unauthorized error was encountered while trying to use an ErrorDocument to handle the request.

您需要在身份验证中“打个洞”并允许 public 访问此文档。

例如:

<Files "error.php">
    Require all granted
</Files>
  1. Created the error page in a different directory.

如果“不同的目录”也没有受到 HTTP 身份验证的保护,那应该行得通。例如,子目录将无济于事。

  1. Specified the complete url of the error page in the .htaccess file.

这会触发外部 302 重定向并丢失 401 响应。这是不允许的。如 Apache docs 中所述:

if you use an ErrorDocument 401 directive, then it must refer to a local document.

  1. Turned off the directory password function.

如果您关闭了“关闭目录密码功能”,则没有任何东西可以触发 401,因此您的错误文档将可以访问,但是您的 triggering/testing 您的 401 错误文档如何?这好像有点chicken/egg.

  1. Changed the error file extension to .shtml.

更改文件类型在这里没有任何区别。

RewriteRule .*\.(jpg|jpeg|gif|png|bmp|zip|rar)$ - [F,NC]

澄清一下,您没有在任何页面上提供任何图片?任何包含这些文件扩展名之一的请求都将触发 403 Forbidden。


更新: 如果您的错误文档使用了额外的资源,那么将它们全部包含在它们自己的子目录中会更容易(例如 /errordocs)-然后,您可以只允许 public 访问此子目录,而不必识别每个文件。

然后您在 /errordocs 子目录中创建一个额外的 .htaccess 文件,只有一个衬里:

Require all granted