【问题标题】:PHP header redirect 301 - what are the implications?PHP 标头重定向 301 - 有什么影响?
【发布时间】:2011-11-11 14:01:37
【问题描述】:

我有 domain.com。如果用户已登录,它应该会自动加载 domain.com/option-X 其中 X 是用户的预定义选择。

所以,我在 index.php 的顶部执行此操作:

header("Location: /option-X"); 

但是,如果用户没有登录,我只是自动选择第一个选项,如下所示:

header("HTTP/1.1 301 Moved Permanently"); 
header("Location: /option-a"); 

所以,关于这样做的影响,我有两个问题:

  1. 由于搜索引擎爬虫不会登录,他们总是会得到 domain.com/option-a - 它有 301 标头会影响他们吗?
  2. 执行这些重定向的服务器 CPU 负载可能是多少?我不知道如何对其进行测试。当前网站(没有重定向)每天的访问量约为 10 万次。

【问题讨论】:

  • cpu 开销取决于您的脚本在重定向标头消失之前所做的事情。如果您将 pi 计算到 500 万个位置,那么进行重定向会使工作量增加一倍,因为浏览器将对新地址发出全新的 http 请求。否则,CPU 命中应该是最小的,而你所付出的只是一点额外的带宽。
  • 谢谢马克!它在重定向之前所做的只是检查 $_SESSION 变量。

标签: php redirect header http-status-code-301


【解决方案1】:

这样更好:

<?php
//* Permanently redirect page
header("Location: new_page.php",TRUE,301);
?>

只需一个调用,包括代码 301。还要注意同一目录中文件的相对路径(不是“/dir/dir/new_page.php”等),所有现代浏览器似乎都支持。

我认为这从 PHP 5.1.2 开始有效,可能更早。

【讨论】:

    【解决方案2】:

    提示:使用http_response_code 比编写完整的标题更容易记住:

    http_response_code(301);
    header('Location: /option-a'); 
    exit;
    

    【讨论】:

      【解决方案3】:

      301 的效果是搜索引擎将索引 /option-a 而不是 /option-x。这可能是一件好事,因为搜索索引无法访问 /option-x,因此可能对索引产生积极影响。仅当您明智地使用它时;-)

      重定向后 put exit();停止脚本的其余部分执行

      header("HTTP/1.1 301 Moved Permanently"); 
      header("Location: /option-a"); 
      exit();
      

      【讨论】:

      • 我假设使用 ob_start('ob_gzhandler');在标头调用之前也不会产生积极影响,对吗?
      • 是的,确实如此。相反:为服务器做更多的工作没有任何好处。
      • 这确实是一个很棒的解决方案,感谢您与我们分享。我通常会使用 Location 标头重定向到我的主域,但事实上您包含搜索引擎的标头,同样重要的是,添加了 exit() 函数对我来说是完美且合乎逻辑的。太好了,再次感谢。
      • 我认为以这种方式缩短代码更简洁:Exit( header("Location: /option-a", true, 301) );
      • 这个header对http2协议有什么影响?
      【解决方案4】:

      像 301 这样的搜索引擎重定向比 404 或其他类型的客户端重定向更好,不用担心。

      CPU 使用率将降至最低,如果您想节省更多周期,您可以尝试使用 htaccess 在 apache 中处理重定向,那么 php 甚至不必参与其中。如果您想对服务器进行负载测试,可以使用 apache 自带的 ab,如果您正在寻找更强大的测试工具,可以使用 httperf。

      【讨论】:

        【解决方案5】:

        确保您在重定向后die(),并确保您在脚本执行时尽快进行重定向。它确保不再浪费数据库查询(如果有的话)。这是我可以给你的一个提示

        对于搜索引擎来说,301 是最好的响应码

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-06-21
          • 1970-01-01
          • 2020-12-15
          • 2016-09-21
          • 2011-12-04
          • 1970-01-01
          • 2021-09-08
          • 2017-11-17
          相关资源
          最近更新 更多