PHP标头404不起作用
Posted
技术标签:
【中文标题】PHP标头404不起作用【英文标题】:PHP header 404 not working 【发布时间】:2011-08-20 07:47:00 【问题描述】:为什么这不起作用,因为预设的404页面没有加载:
header("HTTP/1.0 404 Not Found");
exit;
.htaccess
具有 ErrorDocument 404 /404.html
指令集。
谢谢。
【问题讨论】:
【参考方案1】:不幸的是,我最近在工作 php 项目时遇到了同样的问题。
发送标头本质上只是一条“状态消息”,不会使浏览器或服务器显示特定页面(尽管我相信一些旧版本的 IE可能显示其默认的 404 页面)。 这意味着您需要在脚本中创建自己的 404 错误消息,因为 .htaccess 错误处理不起作用。
我的建议是使用类似的东西
header("HTTP/1.0 404 Not Found");
include('./404.html');
exit;
我知道这可能看起来很愚蠢,但到目前为止,这是我发现的唯一可行的方法。
【讨论】:
嗨,Sunny,如果一切都失败了,我会试一试,但这似乎很愚蠢。我已经告诉浏览器该页面不存在,它也是输出的第一行。【参考方案2】:确保您的自定义错误页面 /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>");
?>
【讨论】:
嗯,我想获得默认的 404 错误,而不是初学者的自定义错误。 如果您在 .htaccess 中有ErrorDocument 404 /404.html
指令,那么这是否意味着您正在尝试为 404 错误显示 404.html
。
哈哈,对不起。我忘了告诉你现在已经被注释掉了。
这正是我一直在寻找的东西,让我发疯,因为我期待 httpd 能够整理出要显示的 404。我什至没有想到 php 输出代码和页面 html。谢谢!【参考方案3】:
这很可能是因为 Apache 已经将初始请求传递给 PHP 页面来处理。很可能是因为您有一个有效的前端控制器实现,并且正在将所有 Web 请求重定向到此页面。这将 404 的责任与要显示的适当 404 页面一起留给您的应用程序。
【讨论】:
没错,所有流量都被重定向到这个页面 - 这是一个带有友好 URL 的 SEO 事情。【参考方案4】:我注意到它不起作用,所以我创建了一个带有静态方法的类来解决问题
我有一个目录/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 还是自定义错误
希望对你有帮助
【讨论】:
以上是关于PHP标头404不起作用的主要内容,如果未能解决你的问题,请参考以下文章