ErrorDocs | 虚拟主机 | Apache 2.2.x

ErrorDocs | 虚拟主机 | Apache 2.2.x

因此,我遇到了一个挑战,即尝试让我的虚拟主机(在示例中称为 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指令来映射/errorsURL 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>

相关内容