这是一个非常奇怪的问题。在我的代码中,我有一个在我的本地服务器上完美运行的重定向。
header("location:/sign-up-success");
当我推向生产时,它只是没有重定向。有没有我失踪的环境?
我甚至尝试过:
header("Location: https://www.myurl.com/sign-up-success");
似乎只是跳过了重定向。有什么想法吗?
答案 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”。打开它修复了标题问题以及其他一些问题。
对于那些有其他标题问题的人,请查看其他回复,因为如果您关闭了错误报告,它们将会有所帮助。 (之前我遇到过这个问题,这就是为什么我知道这不是问题,但对于那些使用重定向但不知道问题是什么的人来说,这肯定是一件令人头疼的事。)
谢谢大家。