【问题标题】:Headers not re-directing (and there aren't any errors)标题不重定向(并且没有任何错误)
【发布时间】:2011-08-17 08:40:20
【问题描述】:

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

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

当我推送到生产环境时,它只是不会重定向。有没有我遗漏的设置?

我什至尝试过:

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

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

【问题讨论】:

  • 检查您的错误日志中是否有任何 PHP 警告/错误?您的生产服务器可能不会将它们直接报告给浏览器。
  • 标头重定向应该在重定向后exit,因此“它应该[不] 跳过重定向”而是直接死掉(如果做得对的话)。此外,您可能在本地服务器上启用了output_buffering,但在生产环境中未启用。尝试在本地机器上关闭它(以及启用@Amber 建议的错误)。
  • @Amber - 错误日志中没有任何错误。这很奇怪。
  • @netcoder - output_buffering 在我的生产服务器上关闭。我继续打开它并修复它!谢谢! (特别是对于那些有类似问题的人,在我本地机器上的 php.ini 文件中,我有“output_buffering = 4096”,而在生产服务器上它被设置为“output_buffering = off”。打开它可以修复它和一些还有其他问题。
  • @Jason,您可以自己将其发布为答案并将其选为正确的解决方案。

标签: php redirect header


【解决方案1】:

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

最佳实践:总是在exit() 之后写header()..

Reference

【讨论】:

  • 添加 ob_start() 是一种解决方法,而不是解决方案。解决方案是消除任何输出。
【解决方案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())

【讨论】:

    【解决方案3】:

    它似乎只是跳过了重定向。

    您需要查看脚本在标题/内容中返回的确切内容。有很多可用的工具 - HTTP fiddler,即 MSIE 的 httpheaders,对于 Firefox,有 tamperdata、liveheaders、Web 开发人员工具栏等等。或者嗅探网络流量(虽然解码 ssl 可以是 PITA)

    【讨论】:

      【解决方案4】:

      感谢您的所有回复。看来这个问题的答案是由 cmets 中的@netcoder 给出的。答案如下:

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

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

      谢谢大家。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-24
        • 2021-04-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多