无法获取 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
我有一个共享托管服务器,其中每个子域都在其根文件夹中。 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