首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用nginx/php-fpm时,location头有时会被浏览器忽略。为什么?

使用nginx/php-fpm时,location头有时会被浏览器忽略。为什么?
EN

Stack Overflow用户
提问于 2010-11-11 09:34:48
回答 1查看 2.5K关注 0票数 1

我正在将一个正在运行的apache/mod-php网站迁移到nginx/php-fpm。

在Apache/mod-php下,我可以使用header("Location: $url");将浏览器重定向到不同的页面,比如在尝试登录之后。切换到nginx/php-fpm后,浏览器在某些页面上将不再遵循该重定向。我向Firebug和Httpfox确认了在响应中确实收到了报头"Location: url“。此行为也会出现在Chrome中(未在IE中测试)。

所以我做了一些实验,阅读了一些关于http的东西,并使它工作,但我不确定它为什么工作(或为什么它不工作)。

我想出的解决方案是在"Location: url“头之前发送一个"Status: 303”头。这在Chrome和Firefox中都有效,当我发送" Status : 200“时,它们都忽略了Location头部,或者省略了Status头部,但当我将其改为"Status 303”时,它们进行了重定向。它在Apache下与状态200一起工作。

使用Location header是否需要Status header?或者Apache正在做一些其他的事情来使它工作?除了使其工作的header("Status: 303");行之外,我没有更改任何涉及到的php代码。一定有其他原因在起作用,但我不知道是什么原因。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-11 09:48:58

Location标头本身不会触发浏览器重定向。重定向实际上是由3xx系列中的HTTP响应代码触发的。w3c has explanations for all http response codes

Apache会自动在响应中看到Location标头,如果您以前没有设置自己的响应代码,它会强制响应代码为300系列。Nginx不会这样做--它希望您自己设置正确的响应代码。

您可以强制php发送修改后的HTTP响应代码,如下所示:

代码语言:javascript
复制
<?php
  header("HTTP/1.0 301 Moved Permanently");
?>

...Then,当然,您需要确保在发送了上面所示的HTTP/1.0...行之后仍然发送了Location头。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4150717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档