由于标题()导致HTTP 302错误

时间:2013-09-25 14:39:14

标签: php redirect header

如果我在任何serch引擎中验证html或注册web,我会收到302错误。

原因是header()函数。如果我拿走它,一切都很好,200 OK状态。

所以主要的问题是我需要这个web重定向是多语言的。

逻辑是下一个。当用户第一次进入网页时,index.php - require_once是一个带有函数的文件:

function cookies() {
    if (!isset($_COOKIE["lang"])){
    setcookie('lang','ukr', time()+(60*60*24*31)); 
    header('Location: index.php');
}}
cookies();

因此用户会看到已经使用deafault语言提交的页面。

如果require_once文件没有重定向,则不会下载mysql中的数据,用户也看不到任何文本。

问题:我应该将此保留在HTTP 302中,还是重建整个站点/逻辑,以便在索引页面没有重定向?

3 个答案:

答案 0 :(得分:2)

302不是错误。它是“Found”的状态代码(又名“你要求的文件就在这里”)。如果添加Location标题,PHP会自动为您插入此内容(除非手动插入状态,但此处不需要301)

如果您要告诉别人根据语言偏好获取不同的文档,这是预期的响应。

虽然从index.php重定向到index.php但很奇怪。大概你应该直接返回相应的文档,而不是重定向。

答案 1 :(得分:0)

我明白了。实际上非常简单。

验证程序不接受cookie。所以他们陷入了无限循环。

您可以测试一下:

  1. 从您的计算机中删除所有Cookie。
  2. 在浏览器中停用Cookie并尝试加载您的网站。

答案 2 :(得分:0)

每当你使用标题(“位置:......你将获得302,这是一个状态而不是错误,它告诉浏览器该网站已重定向页面:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

阅读那些验证器和引擎,看看302是否对您要做的任何事情都有问题,通常情况下不应该这样。

一种肮脏的方式是强制标题,个人我不鼓励这个,也不知道它有什么副作用,但它可能是一个快速的解决方法来欺骗那些引擎:

function cookies() {
    if (!isset($_COOKIE["lang"])){
    setcookie('lang','ukr', time()+(60*60*24*31)); 
    header('Location: index.php');
    header('HTTP/1.1 200 OK'); // <--- Forcing the header status
}}
cookies();