【问题标题】:Inconsistent HTTP redirect behavior between hosting environments托管环境之间的 HTTP 重定向行为不一致
【发布时间】:2013-03-12 17:10:54
【问题描述】:

这是one I asked a few days ago 的后续问题,最终我自己解决了。虽然我很高兴发现了根本问题,但问题只出现在一个(三个)环境中的事实似乎很奇怪。

该问题与在控制器 ($this->redirect(...);) 中重定向的 CakePHP 2.3.0 站点上的操作有关。

基本上,重定向在我的本地(Mac OS X/10.6.8、Apache/2.2.17、PHP/5.3.4)开发机器以及我同事的(Windows 7、Apache/2.4.2、PHP /5.4.3)。 “添加”操作将记录插入数据库,然后重定向到“索引”操作。用户登录工作正常。没问题,一切看起来都正确。

但是,在我们的暂存服务器(Debian GNU/Linux 6.0.6 kernel 3.2.6、Apache/2.2.22、PHP/5.3.15)上,任何尝试重定向的控制器操作都会导致 HTTP 200 空白页(而不是预期的 HTTP 302 重定向)。

页面并不是真正的空白,我最终发现在我的一个控制器的开始 PHP 标记之前错误地添加了一个换行符。据我了解,换行符本质上触发了标头输出的结束,因此无法写入 Location: ... 标头。

一旦发现错误的换行符,这是一个快速修复,但我想知道为什么我在我的 Mac 或我同事的 Windows 机器上没有看到相同的空白页行为。我不确定这是否是 PHP 或 Apache 版本之间的怪癖,或者真的是什么。我会对任何人关于事物为何如此行事的理论感兴趣。

【问题讨论】:

  • 如何在机器之间移动文件?
  • 我们有一个颠覆性回购

标签: php http cakephp redirect http-headers


【解决方案1】:

根据这个堆栈溢出问题的答案:“How to fix "Headers already sent" error in PHP”:

但它在另一台服务器上工作!?

如果您之前没有收到 headers 警告,那么 php.ini 设置 已经变了。然后在另一个上启用输出缓冲 服务器,但不在当前。请参阅上一节。

【讨论】:

  • 所有服务器的错误报告都打开了,我没有收到错误消息。我理解“标头已发送”位,但为什么重定向在任何地方都有效?他们不应该都因空白页而失败吗?抱歉,如果我在您的回答中遗漏了什么。
  • 抱歉,请重新阅读有关输出缓冲的部分,这实际上是配置差异。感谢您的回答!
猜你喜欢
  • 2019-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-21
相关资源
最近更新 更多