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

Joh*_*ith 50 php header http-status-code-404

我在我的网站的主目录中有一个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.

ick*_*fay 82

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

您可以HTTP/1.0 404 Not Found通过创建一个名为(例如)test.php此内容的PHP文件来测试这一事实:

<?php

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

然后查看结果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.
Run Code Online (Sandbox Code Playgroud)

  • @John:如果找不到文件,那么当你只是重定向到一个通知他们没找到它的页面时,说"哦,我找到了那个文件;它就在这里"在技术上是错误的.要在语义上正确,您必须发送`HTTP/1.x 404 Not Found`和*not*redirect. (3认同)
  • @John:嗯,我是说你应该 1. 发送 HTTP 东西,2. 包括你的 `404.php`(不重定向到它),以及 3. 按顺序调用 `die`。 (2认同)

Jim*_*zuk 28

您可以尝试使用可选参数指定HTTP响应代码:

header('HTTP/1.0 404 Not Found', true, 404);
Run Code Online (Sandbox Code Playgroud)


Avi*_*ior 8

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

http_response_code(404);
Run Code Online (Sandbox Code Playgroud)

PHP 文档


Shi*_*ngh 7

使用这些代码找不到404.

if(strstr($_SERVER['REQUEST_URI'],'index.php')){
  header('HTTP/1.0 404 Not Found');
  readfile('404missing.html');
  exit();
}
Run Code Online (Sandbox Code Playgroud)

404missing.html是您未找到的设计页面.(它可以是.html或.php)