如何使用 PHP 创建错误404页面?

我的文件 .htaccess处理从 /word_here到我的内部端点 /page.php?name=word_here的所有请求。PHP 脚本然后检查请求的页是否在其页数组中。

如果没有,如何模拟错误404?

我尝试了这一点,但它没有导致我的404页面配置通过 ErrorDocument.htaccess显示。

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

我认为重定向到错误404页面是错误的,这种想法对吗?

256797 次浏览

试试这个:

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

你所做的一切都会成功浏览器会收到一个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

你记得死()后发送标题?404报头不会自动停止处理,所以如果有进一步的处理发生,它可能看起来没有做任何事情。

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

通过.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

生成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()并不是必需的,但它确保您不会继续正常的执行。

尝试输入 < br >

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

.htaccess文件中。

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

在该行之后立即尝试使用 exitdie()关闭响应

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

or

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

在 Drupal 或 Wordpress CMS (可能还有其他的)中,如果你想让一些自定义的 PHP 代码看起来不存在(除非满足某些条件) ,以下方法可以让 CMS 的404处理程序接管:

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

试试这个。

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