3

如果我在任何搜索引擎中验证 html 或注册网页,我会收到 302 错误。

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

所以主要问题是我需要这种重定向才能使网络成为多语言。

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

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

所以用户会看到一个已经使用默认语言归档的页面。

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

问题:我应该将其保留为 HTTP 302 还是重建整个站点/逻辑以在索引页面上没有任何重定向???

4

3 回答 3

4

302不是错误。它是“找到”的状态代码(又名“您要求的文档在此处”)。如果您添加Location标题,PHP 将自动为您插入此内容(除非手动插入状态,但您不希望此处出现 301)

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

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

于 2013-09-26T14:28:41.300 回答
1

我得到了它。其实很简单。

验证器不接受 cookie。所以他们陷入了一个无限循环。

您可以对此进行测试:

  1. 从您的计算机中删除所有 cookie。
  2. 在您的浏览器中禁用 cookie 并尝试加载您的网站。
于 2013-09-25T14:45:42.920 回答
0

每当你使用 header("location: .... 你会得到一个 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();
于 2013-09-26T14:35:38.937 回答