0

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

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

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

4

3 回答 3

4

Location发送带有404状态码的标头是没有意义的。

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

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

这两种说法是不相容的。

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

于 2012-11-13T12:49:10.397 回答
2

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

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

if (! is_numeric($_GET['id'])) {
    header('Location: ' . $url, true, 404);
    exit();
}
于 2012-11-13T12:51:59.437 回答
0

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

在 404 的情况下 - 这将显示由您的 Web 服务器配置定义的错误相关错误页面。

做你想做的事......你需要将服务器的 404 从一个普通的 html 修改为一个 php 页面,并计算出从那里显示的内容(你可以基于引用者等)。

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

于 2012-11-13T12:49:38.263 回答