为什么这不起作用,因为未加载预设的404页面:
header("HTTP/1.0 404 Not Found");
exit;
.htaccess
设置了ErrorDocument 404 /404.html
指令。
谢谢。
答案 0 :(得分:6)
最近我在处理PHP项目工作时遇到了同样的问题。
发送标题本质上只是一个“状态消息”,并不会使浏览器或服务器显示特定页面(尽管我相信某些旧版本的IE 可能显示其默认的404页面)。 这意味着您需要在脚本中创建自己的404错误消息,因为.htaccess错误处理不起作用。
我的建议是使用
的内容header("HTTP/1.0 404 Not Found");
include('./404.html');
exit;
我知道这看起来很愚蠢,但到目前为止,这是我发现的唯一方法。
答案 1 :(得分:5)
确保您的自定义错误页/404.html
的内容大小超过512字节。如果自定义404页面的内容长度小于512,则许多浏览器(如IE,Chrome等)都不会显示您的自定义页面。
根据您的评论,我认为这是正在发生的事情。
如果您查看此空白页面的Firebug / HTTP Watch等中的access.log或http标头,您将看到404返回代码。一旦Web服务器开始处理PHP页面,它已经通过了它将自己处理404处理的点,因为你的php文件实际上是 FOUND 。现在,由于您的PHP代码只返回状态404 没有任何内容,因此会显示空白页面。
现在,因为这是正确的apache行为,它由你来创建404页面的内容。我认为你上面的PHP代码中的这样的东西会很好:
<?php
header("HTTP/1.0 404 Not Found");
exit("<h1>Not Found</h1>
The requested URL " . $_SERVER["REQUEST_URI"] . " was not found on this server.
<hr>");
?>
答案 2 :(得分:0)
这很可能是因为Apache已经将初始请求传递给PHP页面来处理。很可能是因为您有一个有效的前端控制器实现,并将所有Web请求重定向到此页面。这使得404s对您的应用程序负责,并显示适当的404页面。
答案 3 :(得分:0)
我注意到它不起作用,所以我用静态方法创建了一个类来解决问题
我有一个目录/error-pages
,我在其中存储所有错误文件
我有一个课程文件error.php
,可以将其放在每个页面的顶部
class ServerError{
public static function show($page){
require $_SERVER['DOCUMENT_ROOT'].'/error-pages/'.$page.'.php';
exit();
}
}
例如,在您的home.php
页上,您说
if (my404IsTrue) {
ServerError::show("404");
}
这样。您可以将其用于其他任何类型的错误,无论是403还是自定义错误
希望有帮助