【问题标题】:PHP - header() redirect: Firebug logs 404 - why?PHP - header() 重定向:Firebug 记录 404 - 为什么?
【发布时间】:2024-05-16 11:05:02
【问题描述】:

我在我的一个项目中使用 PHP 重定向。我是这样做的:

header( 'Location: http://domain.net/?cig=warn&onum=' . $onum . '&cnum=' . $cnum . '&c=' . $c . '#Form' );

所以你看,这是对 PHP 的 header() 函数的正常使用,其中一些变量包含在 URL 中。
它正在工作,但使用 Firebug 测试页面时,我在控制台中收到此错误:

"NetworkError: 404 Not Found - http://domain.net/?cig=warn&onum=12&cnum=73&c=ui#Form"

我这样做的方式实际上有什么问题,或者这只是 Firebug 因为所有参数和锚点而变得挑剔?

【问题讨论】:

  • 那么,页面找到了吗?
  • 是的,它正在工作,我只是想知道为什么 Firebug 会给我这个错误。
  • 目标位置是否会出于某种原因发送 404?
  • ^^^ 那或萤火虫错误,有很多方法可以检查发送的标头。
  • 不,因为它是同一页面内的重定向,我认为目标域不会发送 404。

标签: php redirect header http-headers firebug


【解决方案1】:

由于此页面位于 WordPress 环境中,因此您必须在发送标头之前手动设置 200 状态代码(使用 WordPress status_header() 函数):

<?php
// This must appear before any output is sent!
status_header(200);
?>

显然,您必须引入 WordPress 功能才能做到这一点。问题是 WordPress 在您的页面有机会处理它之前拦截了请求。它找不到“页面”并设置了一个 404 响应代码,这就是最终被发回的代码。

当我过去不得不引入 WordPress 功能时,我通过在页面上包含以下两行来做到这一点:

define('WP_USE_THEMES', false);
require_once("/path/to/my/site/wp-blog-header.php");

现在,也就是说,我过去使用的页面与我安装的 WordPress 中的页面具有相同的外观和感觉。可能有更好的方法来单独引入函数;您必须查阅 WordPress 文档才能找到(我不知道是否有)。对于WordPress StackExchange site来说,如何正确地做到这一点可能是一个很好的问题。

【讨论】:

  • 你的解释对我来说听起来合乎逻辑。现在的问题是,只要我执行include( '../../../../wp-includes/functions.php' );,脚本就会完全停止工作。我是否需要通过另一个文件访问 Wordpress functions.php?
  • 确实,这样我就可以在文件中使用status_header,尽管它位于标准 Wordpress 文件之外。但 Firebug 仍然显示 404。我用 function_exists 进行了测试,如果 status_header 可用并且它是可用的,那么问题必须出在其他地方。
  • 嗯。您可能会在代码中的不同位置定位调用。也许 404 正在其他地方设置?当我做这种事情时,上面的内容对我有用,所以我不确定你会发生什么。调试这些东西真的很棘手。您可以尝试使用其中一个标头扩展来查看实际标头,或尝试Fiddler