因此,我遇到了一个挑战,即尝试让我的虚拟主机(在示例中称为 bozo)“指向”401、403 等错误的正确错误文档。我尝试了以下构造,但似乎不起作用:
<VirtualHost <ip.address.here>
ServerAdmin [email protected]
DocumentRoot /home/www/htdocs/virtual/bozo
ServerName www.bozoclown.com
ErrorLog logs/bozo_error_log
ErrorDocument 401 errors/401.html
ErrorDocument 404 errors/404.html
ErrorDocument 403 errors/403.html
</VirtualHost>
自定义错误文件 401.html、403.html 等位于文档根目录下的 errors 子目录中。如果我将浏览器指向www.bozoclown.com/errors/403.html,403.html 文件就会出现(因此它和其他错误文件都在那里,并且可以访问)。但是,当我故意在访问虚拟站点时生成 403 错误时,我并没有被发送到自定义 403 页面。相反,我得到了以下错误:
You don't have permission to access / on this server.
Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.
因此,我尝试在虚拟主机声明中添加以下内容:
<Directory "/home/www/htdocs/virtual/bozo/errors">
Order allow,deny
Allow from all
</Directory>
但那不起作用。
有什么建议吗?能指出我需要做的明显修正吗?
提前致谢。
答案1
您需要稍微修改一下配置文件,您需要一个Alias
指令来映射/errors
URL path
,将 ErrorDocument 更新为 URLpath
而不是文件路径。
这是最终文件,重启 Apache 服务器后它应该可以工作
<VirtualHost <ip.address.here>>
ServerAdmin [email protected]
DocumentRoot /home/www/htdocs/virtual/bozo
ServerName www.bozoclown.com
ErrorLog logs/bozo_error_log
Alias /errors "/home/www/htdocs/virtual/bozo/errors"
<Directory "/home/www/htdocs/virtual/bozo/errors">
Options -Indexes
Order allow,deny
Allow from all
</Directory>
ErrorDocument 401 /errors/401.html
ErrorDocument 404 /errors/404.html
ErrorDocument 403 /errors/403.html
</VirtualHost>