我有一个奇怪的问题。它看起来几乎像个虫子。
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;
}