在PHP中发送404标头后,从htaccess显示404文档

时间:2013-04-05 22:39:43

标签: php html .htaccess mod-rewrite redirect

在PHP中,我使用以下代码表示找不到页面:

header("HTTP/1.0 404 Not Found");exit();

.htaccess文件中,我有以下行来处理404自定义文档:

ErrorDocument 404 /404.html

现在,当我发送PHP 404标头时,我希望它显示404.html中定义的自定义.htaccess,但它会显示一条消息“此链接似乎已损坏”。因此它不显示自定义404页面,如果我从.htaccess删除该行,它仍然不会显示服务器的常规404页面,并显示损坏的链接消息。

那么当我用PHP发送标题时如何让它显示404页面?

2 个答案:

答案 0 :(得分:4)

此处的问题是,除非URL处理管道找不到URL指向的文件(或处理程序),否则不会处理由ErrorDocument表示的自定义错误文档。在你的情况下,处理管道确实找到一个文件,你的php文件,因此它永远不会自己达到404,所以永远不会应用ErrorDocument

当apache使用php处理程序运行你的php文件,你的 php文件决定返回404 时,你不仅需要提供404响应代码,还需要提供HTML错误文档。您没有看到默认的apache错误文档,因为apache从不认为请求是404(它将请求发送到您的php文件)。所以你需要做这样的事情:

header("HTTP/1.0 404 Not Found");
include('404.html');
exit();

答案 1 :(得分:0)

您只需向浏览器发送404代码,然后尝试重定向到您的错误404页面

header('location: http://youdomain.com/404.html'); exit;