PHP标头不保留查询字符串

时间:2011-12-30 09:30:42

标签: php string header

我有一个奇怪的问题。这几乎就像一个bug。

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标头获取值”等术语搜索大约半小时。我希望有一些实际的解决方案,而不是使用生成“无法修改标题信息”警告的hacky变通方法......

5 个答案:

答案 0 :(得分:2)

重定向后尝试添加exit;。这会停止执行当前文件。

答案 1 :(得分:2)

添加

exit(0);

在重定向的标题之后。

因为即使在标题调用之后代码仍继续运行。您需要显式退出重定向的脚本。这将讨论更多here

答案 2 :(得分:1)

正确的语法是:

header("Location: $url");

那里有一个空间和一个大写字母L,我不确定这会有多大区别。

目前我建议做一些低级调试。使用wgetcurl,浏览器中的开发人员模式或将回显所有HTTP标头的插件,然后准确发布服务器标头中返回的内容(如果结果不允许)无论如何你要弄清楚。)

答案 3 :(得分:1)

传递exit标题后,您应始终Location,以防止显示其余部分。此外,它应该解决你的问题。


此外,Location标题的正确形式为:

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

我认为这不重要,只有旧浏览器可能吗?

答案 4 :(得分:0)

您可以使用带有元标记的重定向功能。这将保留查询字符串

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