header('HTTP/1.0 404 Not Found');啥都不做

Posted

技术标签:

【中文标题】header(\'HTTP/1.0 404 Not Found\');啥都不做【英文标题】:header('HTTP/1.0 404 Not Found'); not doing anythingheader('HTTP/1.0 404 Not Found');什么都不做 【发布时间】:2011-07-28 21:39:35 【问题描述】:

我的站点主目录中有一个 404.php 文件,我使用 header('Location: 404.php'); 有一段时间,直到有人说您应该改用 header('HTTP/1.0 404 Not Found');。所以我用它替换它,然后添加:ErrorDocument 404 /404.php 到我的 apache 配置文件并重新启动服务器,但它不起作用。

我尝试了不同的变体,包括 ErrorDocument 404 404.phpErrorDocument 404 mywebite/404.php,但无济于事。

我的意思是,在早期使用header('Location: 404.php'); 时,它会重定向到 404.php 文件,但是当我用header('HTTP/1.0 404 Not Found'); 替换它时,它似乎只是跳过该行而不做任何事情。它肯定不是重定向。我要求重定向的原因是因为如果 $_GET 标头值无法识别,则页面应为 404。

【问题讨论】:

它有什么作用?是否显示 Apache 的 404 页面? “有人说...”你听了吗? 404.php 显示我的自定义 404 页面,而 HTTP/1.0 404 Not Found 什么也不做。 php 文件就像什么都没发生一样继续运行。 我相信 ErrorDocument 仅在 Apache 不知道向何处发送请求时才相关。如果它向脚本发送请求,并且该脚本选择返回 404 标头,则 apache 不会调用第二个 404 脚本——它只会返回初始脚本的输出。 Why won't my PHP app send a 404 error? 的可能重复项 【参考方案1】:

我认为这会对你有所帮助

.htaccess 的内容

错误文档 404 /error.php 错误文档 400 /error.php 错误文档 401 /error.php 错误文档 403 /error.php 错误文档 405 /error.php 错误文档 406 /error.php 错误文档 409 /error.php 错误文档 413 /error.php 错误文档 414 /error.php 错误文档 500 /error.php 错误文档 501 /error.php

error.php 和 .htaccess 应该放在同一个目录[在这种情况下]

【讨论】:

如果您使用的是 WAMP,则应将其放入 WWW 目录中【参考方案2】:

您可以尝试指定 HTTP 响应代码using an optional parameter:

header('HTTP/1.0 404 Not Found', true, 404);

【讨论】:

不为我做任何事。【参考方案3】:

不,它可能确实有效。它只是不容易看到。而不是只是使用header调用,尝试这样做,然后包括404.php,然后调用die

您可以通过使用以下内容创建一个名为test.php 的 PHP 文件来测试 HTTP/1.0 404 Not Found 是否有效:

<?php

header("HTTP/1.0 404 Not Found");
echo "PHP continues.\n";
die();
echo "Not after a die, however.\n";

然后使用curl -D /dev/stdout 查看结果:

HTTP/1.0 404 Not Found
Date: Mon, 04 Apr 2011 03:39:06 GMT
Server: Apache
X-Powered-By: PHP/5.3.2
Content-Length: 14
Connection: close
Content-Type: text/html

PHP continues.

【讨论】:

有什么理由不只做一个标题('Location: 404.php');调用而不是先调用 HTTP/1.0 404 Not Found? @John:如果没有找到文件,当你只是重定向到一个页面时,说“哦,我找到了那个文件;它在这里”在技术上是错误的。没找到。要在语义上正确,您必须发送 HTTP/1.x 404 Not Foundnot 重定向。 但这没有任何作用..?抱歉,如果我遗漏了什么,但语义版本在我的情况下不起作用? @John:嗯,我是说你应该 1. 发送 HTTP 的东西,2. 包括你的 404.php(不重定向到它),以及 3. 按这个顺序调用 die 啊,我明白你了。这实际上效果很好,因为不需要重定向,它也非常有效!谢谢。【参考方案4】:

将这些代码用于 404 未找到。

if(strstr($_SERVER['REQUEST_URI'],'index.php'))
  header('HTTP/1.0 404 Not Found');
  readfile('404missing.html');
  exit();

这里的 404missing.html 是您的 Not found 设计页面。 (可以是 .html 或 .php)

【讨论】:

【参考方案5】:

写完

header('HTTP/1.0 404 Not Found');

为您网站上任何不存在的页面再添加一个标题。它可能会有所帮助。

header("Location: http://yoursite/nowhere");
die;

【讨论】:

工作。但是,网址不应该改变吗? U 添加第二行以确保,如果第一行不适用于您的服务器,则第二行将重定向到您网站不存在的页面。而不是“你的网站”写你的网站域。 header 调用与 die 组合应该始终有效。重定向不是很好的补救措施。【参考方案6】:

另一个原因可能是您在此重定向之前添加了任何 html 标记。 仔细看,你可能会在这行之前留下 DOCTYPE 或任何 html 注释。

【讨论】:

【参考方案7】:

对于 PHP >= 5.4,您可以使用如下更简单的函数:

http_response_code(404);

PHP Documentation

【讨论】:

以上是关于header('HTTP/1.0 404 Not Found');啥都不做的主要内容,如果未能解决你的问题,请参考以下文章

19.在HTTP 1.0中,状态码401的含义是(?);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(?)写出http常见的状态码和含义,至少5个.[完善题目]

将正文添加到 404 Not Found 异常

烧瓶教程 - 404 Not Found

Nginx 404 Not Found 解决办法

404 Not Found 或错误请求?

404 NOT FOUND!