【发布时间】:2011-05-08 05:37:45
【问题描述】:
我正在将一个正常工作的 apache/mod-php 网站迁移到 nginx/php-fpm。
在 Apache/mod-php 下,我可以使用 header("Location: $url"); 将浏览器重定向到不同的页面,例如在登录尝试之后。切换到 nginx/php-fpm 后,浏览器将不再遵循某些页面上的重定向。我通过 Firebug 和 Httpfox 确认响应中实际上收到了标题“Location: [url]”。此行为也出现在 Chrome 中(未在 IE 中测试)。
所以我做了一些实验,阅读了一些关于 http 的东西,并使它工作,但我不确定它为什么工作(或为什么没有工作)。
我想出的解决方案是在“位置:[url]”标头之前发送“状态:303”标头。这适用于 Chrome 和 Firefox,当我发送“状态:200”或省略状态标题时,它们都忽略了位置标题,但是当我将其更改为“状态 303”时进行了重定向。它适用于 Apache 下的 Status 200。
使用 Location 标头是否需要 Status 标头?或者 Apache 是否正在做其他事情来使其工作?除了使它工作的header("Status: 303"); 行之外,我没有更改任何涉及的php 代码。这里肯定有其他东西在起作用,但我不知道它可能是什么。
有什么想法吗?
【问题讨论】: