标题没有重定向(并且没有任何错误)

时间:2011-05-03 00:40:32

标签: php redirect header

这是一个非常奇怪的问题。在我的代码中,我有一个在我的本地服务器上完美运行的重定向。

header("location:/sign-up-success");

当我推向生产时,它只是没有重定向。有没有我失踪的环境?

我甚至尝试过:

header("Location: https://www.myurl.com/sign-up-success");

似乎只是跳过了重定向。有什么想法吗?

4 个答案:

答案 0 :(得分:2)

可能的原因:您在调用header()之前已向浏览器发送了一些输出 解决方案:在页面顶部写下ob_start()

最佳做法:alwyas在exit()之后写header() ..

<强> Reference

答案 1 :(得分:2)

查看生产服务器上error_reporting的值。如果将其设置为太低级别,则日志中将不会显示任何内容,因为低于error_reporting的级别的错误将被忽略。同样适用于使用@ - 它将error_reporting设置为0,因此如果发生任何不良事件(例如,如果甚至没有定义函数),您将不会在日志中看到任何内容。

根据你所写的关于启用输出缓冲的内容,似乎你在header()之前有一些输出(这就是为什么启用输出缓冲有帮助)并且你的error_reporting被设置为0(这就是为什么没有报告/记录“无法修改标题信息”的警告。


旁注...要充分利用错误报告:

  • error_reporting设置为E_ALL | E_STRICT(在开发和生产环境中)
  • 启用错误日志记录(对于生产环境至关重要,尽管在开发环境中启用它也不会有害)
  • 在开发环境中将display_error设置为true,在生产环境中设置为false(关键!!!用户无需查看任何PHP警告/通知/错误)
  • 另外,您可能希望set_error_handler()输出或记录比默认错误处理程序更多的信息(例如,您可能希望在发生错误时存储debug_backtrace()

答案 2 :(得分:0)

  

似乎只是跳过了重定向。

您需要准确了解脚本/内容中返回的脚本。有很多可用的工具 - HTTP fiddler,即MSIE的httpheaders,Firefox的篡改数据,liveheaders,web开发人员工具栏等等。或者嗅探网络流量(虽然解码ssl可以是PITA)

答案 3 :(得分:0)

感谢您的所有回复。似乎@abcoder在评论中给出了这个问题的答案。答案如下:

在我本地计算机上的php.ini文件中,我有“output_buffering = 4096”,在生产服务器上,它设置为“output_buffering = off”。打开它修复了标题问题以及其他一些问题。

对于那些有其他标题问题的人,请查看其他回复,因为如果您关闭了错误报告,它们将会有所帮助。 (之前我遇到过这个问题,这就是为什么我知道这不是问题,但对于那些使用重定向但不知道问题是什么的人来说,这肯定是一件令人头疼的事。)

谢谢大家。