我有一个 Apache 2 服务器,它有几个具有类似定义的虚拟主机:
<VirtualHost *:80>
DocumentRoot /var/www/html/host1/
ServerName host1.loc
<Directory /var/www/html/host1>
AllowOverride FileInfo Options AuthConfig
</Directory>
ErrorDocument 404 /index.php?error=404
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/html/host2/
ServerName host2.loc
<Directory /var/www/html/host2>
AllowOverride FileInfo Options AuthConfig
</Directory>
ErrorDocument 404 /index.php?error=404
</VirtualHost>
...
<VirtualHost *:80>
DocumentRoot /var/www/html/hostN/
ServerName hostN.loc
<Directory /var/www/html/hostN>
AllowOverride FileInfo Options AuthConfig
</Directory>
ErrorDocument 404 /index.php?error=404
</VirtualHost>
我想自定义404页面。
问题是,当我尝试在任何主机上测试 404 页面时,我可以从最后一个虚拟主机看到该页面。我的配置可能有什么问题?
答案1
将 ErrorDocument 指令放入 Directory 标签内。
树干:https://httpd.apache.org/docs/trunk/custom-error.html
2.2:https://httpd.apache.org/docs/2.2/mod/core.html#errordocument
自定义错误文档使用 ErrorDocument 指令进行配置,该指令可用于全局、虚拟主机或目录上下文。如果 AllowOverride 设置为 FileInfo,则可在 .htaccess 文件中使用。
答案2
使用 html 文件而不是 php 文件。
ErrorDocument 404 /custom_error_404.html