首页 文章

由于 Headers ()导致HTTP 302错误

提问于
浏览
2

如果我在任何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

    每当你使用 Headers (“位置:......你会得到一个302,它's a status and not an error, it'告诉浏览器该网站已重定向页面:
    http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

    阅读那些验证器和引擎,看看302是否是一个问题,无论你想做什么,通常它不应该 .

    一种肮脏的方式是强制 Headers , personally I don't encourage this and don't know what side-effects could it have really ,但它可能是一个快速解决方法来欺骗这些引擎:

    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();
    
  • 2

    302 不是错误 . 它是"Found"(又名"The document you asked for is over here")的状态代码 . 如果添加 Location 标头,PHP会自动为您插入(除非手动插入状态,但此处不需要301)

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

    但是从 index.php 重定向到 index.php 是很奇怪的 . 据推测,您应该直接返回相应的文档而不是重定向 .

  • 0

    我知道了 . 它实际上非常简单 .

    The validators don't accept cookies. So they get stuck in a an infinite loop.

    你可以测试一下:

    • 从您的计算机中删除所有Cookie .

    • 在浏览器中禁用cookie并尝试加载您的网站 .

相关问题