如何在PHP中创建错误404?

Eri*_*ric 96 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");
Run Code Online (Sandbox Code Playgroud)

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

bla*_*ade 127

用于生成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();
Run Code Online (Sandbox Code Playgroud)

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

  • 我应该在哪个文件中添加这个? (2认同)

JW.*_*JW. 85

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

未找到

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

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

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

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

ErrorDocument 404 /notFound.php
Run Code Online (Sandbox Code Playgroud)


Ate*_*ral 22

试试这个:

<?php
header("HTTP/1.0 404 Not Found");
?>
Run Code Online (Sandbox Code Playgroud)

  • 所以你认为切换到HTTP 1.0会解决这个问题吗? (21认同)
  • 在HTTP 1.0和HTTP 1.1中,404都是404。1.0是安全的选择。酷笑话顺便说一句:) +1 (3认同)

Irs*_*han 10

通过.htaccess文件创建自定义错误页面

1. 404 - 找不到页面

 RewriteEngine On
 ErrorDocument 404 /404.html
Run Code Online (Sandbox Code Playgroud)

2. 500 - 内部服务器错误

RewriteEngine On
ErrorDocument 500 /500.html
Run Code Online (Sandbox Code Playgroud)

3. 403 - 禁止

RewriteEngine On
ErrorDocument 403 /403.html
Run Code Online (Sandbox Code Playgroud)

4. 400 - 不良请求

RewriteEngine On
ErrorDocument 400 /400.html
Run Code Online (Sandbox Code Playgroud)

5. 401 - 需要授权

RewriteEngine On
ErrorDocument 401 /401.html
Run Code Online (Sandbox Code Playgroud)

您还可以将所有错误重定向到单个页面.喜欢

RewriteEngine On
ErrorDocument 404 /404.html
ErrorDocument 500 /404.html
ErrorDocument 403 /404.html
ErrorDocument 400 /404.html
ErrorDocument 401 /401.html
Run Code Online (Sandbox Code Playgroud)

  • RewriteEngine 与此无关;可以安全地省略该行以获得相同的结果。 (3认同)

Eli*_*Eli 5

你还记得发送 header 后要 die() 吗?404 标头不会自动停止处理,因此如果发生进一步处理,它可能看起来没有执行任何操作。

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