【发布时间】:2011-08-20 07:47:00
【问题描述】:
为什么这不起作用,因为预设的404页面没有加载:
header("HTTP/1.0 404 Not Found");
exit;
.htaccess 具有 ErrorDocument 404 /404.html 指令集。
谢谢。
【问题讨论】:
标签: php .htaccess http-status-code-404
为什么这不起作用,因为预设的404页面没有加载:
header("HTTP/1.0 404 Not Found");
exit;
.htaccess 具有 ErrorDocument 404 /404.html 指令集。
谢谢。
【问题讨论】:
标签: php .htaccess http-status-code-404
不幸的是,我最近在工作 PHP 项目时遇到了同样的问题。
发送标头本质上只是一条“状态消息”,不会使浏览器或服务器显示特定页面(尽管我相信一些旧版本的 IE可能显示其默认的 404 页面)。 这意味着您需要在脚本中创建自己的 404 错误消息,因为 .htaccess 错误处理不起作用。
我的建议是使用类似的东西
header("HTTP/1.0 404 Not Found");
include('./404.html');
exit;
我知道这可能看起来很愚蠢,但到目前为止,这是我发现的唯一可行的方法。
【讨论】:
确保您的自定义错误页面 /404.html 的内容大小大于 512 字节。如果您的自定义 404 页面的内容长度小于 512,许多浏览器(如 IE、Chrome 等)不会显示您的自定义页面。
根据您的 cmets,这是我认为正在发生的事情。
如果您查看此空白页面的 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>");
?>
【讨论】:
ErrorDocument 404 /404.html 指令,那么这是否意味着您正在尝试为 404 错误显示 404.html。
这很可能是因为 Apache 已经将初始请求传递给 PHP 页面来处理。很可能是因为您有一个有效的前端控制器实现,并且正在将所有 Web 请求重定向到此页面。这将 404 的责任与要显示的适当 404 页面一起留给您的应用程序。
【讨论】:
我注意到它不起作用,所以我创建了一个带有静态方法的类来解决问题
我有一个目录/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 还是自定义错误
希望对你有帮助
【讨论】: