PHP标头不保留查询字符串


PHP header not keeping query string

我有一个奇怪的问题。它看起来几乎像个虫子。

if ($object->error) {Form::BuildReturn(); header ("location:$url");}

现在如果我回显$url的值,我得到正确的值:/projects/view/112/?edit-note=105

但是当脚本执行时,它带我到/projects/view/112/

这里是奇怪的部分:我可以尝试回显或打印一些东西后的头,然后它会带我到/projects/view/112/?edit-note=105,就像我想要的。例子:

if ($object->error) {Form::BuildReturn(); header ("location:$url"); echo 0;}

我已经尝试搜索这个大约半小时现在使用术语像"PHP头查询字符串","PHP头获取值",等等。我希望有一些实际的解决方案,而不是使用一个黑客的工作方式,产生"不能修改头信息"的警告…

尝试在重定向后添加exit;

添加

exit(0);

重定向头后的

因为代码在头文件调用之后还在继续运行。您需要显式地退出重定向脚本。

正确的语法是:

header("Location: $url");

这里有一个空格和一个大写的L,我不确定这有什么区别。

目前我建议做一些低级别的调试。使用wget, curl,开发者模式在你的浏览器或插件,将回声所有的HTTP头,然后张贴到底是什么在服务器的头返回(如果结果不允许你弄清楚)。

在传递Location标头后,您应该始终使用exit,以防止页面的其余部分显示。而且,它应该能解决你的问题。


同样,Location标题的正确形式应该是:

header("Location: $url"); //Has space and capital L

我不认为这真的很重要,也许只适用于较旧的浏览器?

您可以使用元标记的重定向函数。它将保留查询字符串

function redir($url, $time = 0) {
  echo '<meta http-equiv="refresh" content="', $time, ';URL=', $url, '">';
  die;
}