我的.htaccess会将所有请求重定向到/word_here
到/page.php?name=word_here
。然后,PHP脚本检查所请求的页面是否在其页面数组中。
如果没有,我该如何模拟错误404?
我试过了,但这并没有导致我的{404}页面通过ErrorDocument
显示.htaccess
来配置。
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
我是否正确地认为重定向到我的错误404页面是错误的?
答案 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)
在该行之后,立即尝试使用exit
或die()
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');