无法获取 Apache2 401 授权错误的自定义消息

Can't get the custom message for Apache2 401 authorization error

我有一个共享托管服务器,其中每个子域都在其根文件夹中。 www.domain.com/www 文件夹中,subdomain.domain.com 子域在 /subdomain 文件夹中,等等

我现在想要的是使用 .htaccess 密码限制对 subdomain.domain.com 的访问,但为没有密码的用户显示自定义消息。而且我无法让 Apache2 读取 401 错误文档。我发现一些常见的故障排除说明文件必须是可读的,在我的例子中确实如此。

因此,由于 /subdomain 受到保护,因此我可以在此配置中放置 auth 文件的唯一两个位置是 /www 文件夹下或根目录(如 /401.html),我不知道这是否有任何区别。但在这两种情况下,这些都是 Apache2 显然可读的文件夹,因为我正在使用它们,我正在为 PHP 脚本使用另一个(主)域,并且我在根目录中收到错误日志,文件权限是与 404 文档(有效)相同,所有者相同。

而且我不认为我的托管商禁止我使用自定义 401 错误文档(我已经成功使用自定义 404 和 500 文档),因为只有当我尝试指定 401 文档时,我才会得到额外的在我的错误输出中显示 Additionally, a 401 Authorization Required error was encountered while trying to use an ErrorDocument to handle the request. 的行。好像它正在尝试这样做,但是有其他东西挡住了。

可能是什么,我应该尝试什么?

编辑:

这是 .htaccess 文件的内容:

Options +Indexes +FollowSymLinks
RewriteEngine On

RewriteRule ^([^\.]+)$ index.php?data= [QSA,L]

AuthName "Restricted Area"
AuthType Basic
AuthUserFile /subdomain/.htpasswd
AuthGroupFile /dev/null
require valid-user

ErrorDocument 404 /tpl/errors/404.php
ErrorDocument 500 /tpl/errors/500.php
ErrorDocument 401 /auth_alpha.html

我现在注意到的是,我的 404 消息是从 http 地址开始的绝对路径,而不是文件系统的根目录,这意味着如果我启动带有 / 的 401 错误文件,它会尝试从同一个域读取它吗?这对我来说意义不大,因为它应该是 Apache2 指令,而不是浏览器指令,对吧?无论如何,当我尝试使用 ../auth_alpha.html 而不是 /auth_alpha.html 时,浏览器只会在页面上输出字符串 ../auth_alpha.html

您需要从身份验证中排除 ErrorDocument 个网址:

ErrorDocument 404 /tpl/errors/404.php
ErrorDocument 500 /tpl/errors/500.php
ErrorDocument 401 /auth_alpha.html

Options +Indexes +FollowSymLinks
RewriteEngine On

RewriteRule ^([^.]+)/?$ index.php?data= [QSA,L]

SetEnvIfNoCase Request_URI ^/(auth_alpha\.html$|tpl/errors/) NO_AUTH

# force auth for everything except ErrorDocument URLs
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /subdomain/.htpasswd
AuthGroupFile /dev/null
Require valid-user
Satisfy    any
Order      deny,allow
Deny from  all
Allow from env=NO_AUTH