如何在PHP中创建错误404?

时间:2009-09-04 19:29:59

标签: php redirect http-status-code-404

我的.htaccess会将所有请求重定向到/word_here/page.php?name=word_here。然后,PHP脚本检查所请求的页面是否在其页面数组中。

如果没有,我该如何模拟错误404? 我试过了,但这并没有导致我的{404}页面通过ErrorDocument显示.htaccess来配置。

header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");

我是否正确地认为重定向到我的错误404页面是错误的?

9 个答案:

答案 0 :(得分:109)

生成404页面的最新答案(从PHP 5.4或更新版本开始)是使用http_response_code

<?php
http_response_code(404);
include('my_404.php'); // provide your own HTML for the error page
die();

die()并非绝对必要,但它确保您不会继续正常执行。

答案 1 :(得分:78)

您正在做的事情将起作用,浏览器将收到404代码。 不会做的是显示您可能期望的“未找到”页面,例如:

未找到

在此服务器上找不到请求的URL /test.php。

那是因为当PHP返回404代码时,Web服务器不会发送该页面(至少Apache没有)。 PHP负责发送自己的所有输出。因此,如果你想要一个类似的页面,你必须自己发送HTML,例如:

<?php
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404);
include("notFound.php");
?>

您可以将Apache配置为使用相同的页面来处理自己的404消息,方法是将其放在httpd.conf中:

ErrorDocument 404 /notFound.php

答案 2 :(得分:22)

试试这个:

<?php
header("HTTP/1.0 404 Not Found");
?>

答案 3 :(得分:8)

通过.htaccess文件

创建自定义错误页面

<强> 1。 404 - 找不到页面

 RewriteEngine On
 ErrorDocument 404 /404.html

<强> 2。 500 - 内部服务器错误

RewriteEngine On
ErrorDocument 500 /500.html

第3。 403 - 禁止

RewriteEngine On
ErrorDocument 403 /403.html

<强> 4。 400 - 错误请求

RewriteEngine On
ErrorDocument 400 /400.html

<强> 5。 401 - 需要授权

RewriteEngine On
ErrorDocument 401 /401.html

您还可以将所有错误重定向到单页。像

RewriteEngine On
ErrorDocument 404 /404.html
ErrorDocument 500 /404.html
ErrorDocument 403 /404.html
ErrorDocument 400 /404.html
ErrorDocument 401 /401.html

答案 4 :(得分:3)

发送标题后你还记得死吗? 404标题不会自动停止处理,因此如果发生进一步处理,它可能看起来没有做任何事情。

重定向到您的404页面并不好,但您可以毫无问题地包含它的内容。这样,您有一个页面可以从正确的URL正确发送404状态,但它也有您的“您在寻找什么?”人类读者的页面。

答案 5 :(得分:0)

尝试把

ErrorDocument 404 /(root directory)/(error file) 

.htaccess档案中。

对于任何错误执行此操作,但将404替换为您的错误。

答案 6 :(得分:0)

在Drupal或Wordpress CMS(可能还有其他)中,如果您试图使某些自定义php代码似乎不存在(除非满足某些条件),则通过使CMS的404处理程序接管以下工作可以很好地工作:

<?php
  if(condition){
    do stuff;
  } else {
    include('index.php');
  }
?>

答案 7 :(得分:-1)

在该行之后,立即尝试使用exitdie()

关闭回复
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
exit;

header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
die();

答案 8 :(得分:-3)

尝试一次。

$wp_query->set_404();
status_header(404);
get_template_part('404');