Php 使用404重定向不起作用

Php 使用404重定向不起作用,php,Php,我有一个应该重定向的代码,以防它没有正确设置一些请求参数 if(!is_numeric($_GET['id'])){ header("HTTP/1.0 404 Not Found"); header('Location: '.$url); exit(); } 问题是,每当我检查Firefoxs插件、live HTTP

我有一个应该重定向的代码,以防它没有正确设置一些请求参数

          if(!is_numeric($_GET['id'])){
                         header("HTTP/1.0 404 Not Found");
                    header('Location: '.$url);
                    exit();
               }

问题是,每当我检查Firefoxs插件、live HTTP头时,我都会看到302临时重定向。为什么呢?为什么没有给出404响应?

发送带有
404
状态代码的
位置
标题没有意义

Location
的意思是“你要的东西就在这里”

404
的意思是“我没有你要的东西”

这两种说法不相容


如果您想发送一个特定的人类可读的错误解释,那么只需像输出任何其他类型的文档一样输出它。如果愿意,您可以
include()
it。不要尝试重定向到它。

发送带有
404
状态代码的
位置
标题没有意义

Location
的意思是“你要的东西就在这里”

404
的意思是“我没有你要的东西”

这两种说法不相容


如果您想发送一个特定的人类可读的错误解释,那么只需像输出任何其他类型的文档一样输出它。如果愿意,您可以
include()
it。不要尝试重定向到它。

您只能发送一个您正在尝试的标题,如上所述

在404的情况下,这将显示由web服务器配置定义的与错误相关的错误页面

做你想做的事。。。您需要将服务器的404从普通html修改为php页面,并从中确定要显示的内容(您可以基于referer等)


在“动态”404页面中,如果需要,您可以执行重定向。

您只能发送一个您正在尝试的标题,如上所述

在404的情况下,这将显示由web服务器配置定义的与错误相关的错误页面

做你想做的事。。。您需要将服务器的404从普通html修改为php页面,并从中确定要显示的内容(您可以基于referer等)

在“动态”404页面中,如果需要,您可以执行重定向

问题是,每当我检查Firefoxs插件时,都会看到live HTTP 标题,我看到302临时重定向。为什么呢?为什么没有404 是否给出了响应

不确定您想在这里做什么,但以下内容将提供您的目的

if (! is_numeric($_GET['id'])) {
    header('Location: ' . $url, true, 404);
    exit();
}
问题是,每当我检查Firefoxs插件时,都会看到live HTTP 标题,我看到302临时重定向。为什么呢?为什么没有404 是否给出了响应

不确定您想在这里做什么,但以下内容将提供您的目的

if (! is_numeric($_GET['id'])) {
    header('Location: ' . $url, true, 404);
    exit();
}


您可以发送任意数量的标题。发送一个带有位置的404是没有意义的。对不起,是的。。。我就是这个意思:)嗯。。然后把它放到htaccess中:errordocument404/errormessages/404.phpYup。。。然后你可以让404.php处理它$_服务器['REQUEST_URI']'应该包含URL。同样地,$\u服务器['QUERY_STRING']应该包含任何URL参数,因此您可以使用该信息来处理404请求(如果您认为合适)。您可以发送任意多个头。发送一个带有位置的404是没有意义的。对不起,是的。。。我就是这个意思:)嗯。。然后把它放到htaccess中:errordocument404/errormessages/404.phpYup。。。然后你可以让404.php处理它$_服务器['REQUEST_URI']'应该包含URL您同样$\u服务器['QUERY_STRING']应该包含任何URL参数,这样您就可以使用该信息来处理404请求,因为您认为合适。它没有执行重定向。。它只是抛出了404..why你可以重定向(状态代码302)或找不到(状态代码404),但不能两者都有。hmmm。。你的意思是我做了一个302重定向。。虽然…也许我可以简单地重定向,然后用htaccess抛出404。。但是我不认为它会起作用,因为它没有重定向。。它只是抛出了404..why你可以重定向(状态代码302)或找不到(状态代码404),但不能两者都有。hmmm。。你的意思是我做了一个302重定向。。虽然…也许我可以简单地重定向,然后用htaccess抛出404。。但我不认为它会工作,如果我使用的位置,它给我302状态码。。所以我需要把它和404结合起来。我知道我可以用include.这就是我用的。。我想要的是生成一个状态码。同时更改urlperhaps@DmitryMakovetskiyd-怎么会同时在其他地方找不到东西?当我改变位置时。。新的url由服务器获取并通过htaccess访问。在htaccess中,它转到另一个重定向302,以转到目标页面。这就是为什么当我第一次将头设置为404时,当htaccess介入时,它会用自己的302重定向覆盖404头重定向。这就是为什么我最终使用302重定向而不是404重定向如果我使用位置,它会给我302状态码。。所以我需要把它和404结合起来。我知道我可以用include.这就是我用的。。我想要的是生成一个状态码。同时更改urlperhaps@DmitryMakovetskiyd-怎么会同时在其他地方找不到东西?当我改变位置时。。新的url由服务器获取并通过htaccess访问。在htaccess中,它转到另一个重定向302,以转到目标页面。这就是为什么当我第一次将头设置为404时,当htaccess介入时,它会用自己的302重定向覆盖404头重定向。这就是为什么我最终使用302重定向而不是404重定向