【问题标题】:Redirect a user to an external site while linking to an internal page?在链接到内部页面时将用户重定向到外部站点?
【发布时间】:2012-06-10 05:48:35
【问题描述】:

如何在链接到内部页面时将用户重定向到外部站点?

我见过这样的例子:

  • example.com/go/ksdjfksjdhfls
  • example.com/?go=http://www.new-example.com
  • ...还有更多...

这在php中是如何实现的?

这对 SEO 有什么优点/缺点吗?

【问题讨论】:

    标签: php url redirect seo


    【解决方案1】:

    我认为这种方法没有任何好处,但有几种方法可以实现。要使用 GET 查询,您只需要以下代码:

    HTML:

      <a href="http://example.com/link.php?site=http://www.google.com">Google!</a>
    

    PHP:

    if (filter_var($_GET['site'], FILTER_VALIDATE_URL)) {
              header('Location: ' . $_GET['site']);
    }
    

    在上面的例子中,它实际上会将用户带到那个位置,而不是:

     http://example.com/link.php?site=http://www.google.com
    

    要在拉取远程站点时使 url 成为“本地”,您必须:

    • URL 重写混乱,可能会变得混乱,我不确定是否会让您执行上述操作
    • 通过 curl 检索远程页面并显示它,这可能会搞砸“远程”页面上的链接
    • 使用 iframe 并将 iframe 设置为页面大小。请注意,这最后一种方法虽然攻击性最小,但被认为是一种潜在的安全漏洞,称为“点击劫持”,因为它用于诱骗用户单击一个页面的链接,而该页面隐藏了指向另一个站点的恶意链接。许多服务器和浏览器正在采取措施避免这种情况(例如,谷歌不允许对其主页进行 iframe),因此这也可能会走到死胡同。

    所以在我能想到的三种服务器端方法中,一种可能可行,也可能不可行,而且很痛苦。一个会瘫痪并给服务器带来沉重的负担。最后一个是众所周知的坏人,可能在很多情况下都不起作用。

    所以我只需要重定向,实际上,如果您不需要地址栏来显示本地 URL,那么我只需要一个直接链接。

    所有这些都提出了一个问题:您希望完成什么?

    【讨论】:

    • 我认为我选择的词语让您有些困惑。当我说“在链接到内部页面时”时,我的意思是有一个类似example.com/link.php?site=http://www.google.com 的链接(它属于该站点),但是在单击后用户会被重定向(在您的示例中指向 Google)。该链接仍然指向本地站点,而不是直接指向外部站点。我希望你现在得到我。无论如何,谢谢,您的回答消除了我的疑虑。
    【解决方案2】:

    把它放在任何输出到浏览器之前开始

    <?
    header('location:example.com\index.php');
    ?>
    

    【讨论】:

      【解决方案3】:

      设置一个索引php文件,将标头位置设置为get参数中的url。

      example.com/?go=http://www.new-example.com :

      // example.com/index.php
      <?php
      if (isset($_GET['go'])) {
          $go = $_GET['go'];
          header('Location: $go');
      } // else if other commands
      // else (no command) load regular page
      ?>
      

      example.com/go/ksdjfksjdhfls :

      // example.com/go/ksdjfksjdhfls/index.php
      <?php
      header('Location: http://someurl.com');
      ?>
      

      【讨论】:

        【解决方案4】:

        example.com/?go=http://www.new-example.com

        您可以使用 iframe 并将 src 属性设置为http://www.new-example.com

        <!DOCTYPE HTML>
        <html>
        <head>
        
        </head>
        
        <body>
           <iframe src="http://www.new-example.com" width="100%" height="100%"></iframe>
        
        
        </body>
        </html>
        

        【讨论】:

        • 目前正在监视这种类型的覆盖,无论是远程还是本地浏览器,因为它存在安全风险。
        【解决方案5】:

        我为此使用 .htaccess 规则。无需 PHP。

        Redirect 307 /go/somewhere-else http://www.my-affiliate-link.com/
        

        所以访问http://www.mywebsite.com/go/somewhere-else 将重定向到http://www.my-affiliate-link.com/

        在我的网站上,我使用“nofollow”来告诉搜索引擎不要跟随链接。 307 状态码表示“临时重定向”。

        &lt;a href="http://www.mywebsite.com/go/somewhere-else" rel="nofollow"&gt;Click here!&lt;/a&gt;

        【讨论】:

        • 是的,但这意味着我必须在 .htaccess 文件上手动生成那些重定向规则,我认为“php方式”提供了更大的灵活性,至少我不需要修改文件每次需要新的重定向时。
        • @user983248 没关系,这取决于您要重定向多少页以及您要完成的任务。只是提供一种替代方法。
        猜你喜欢
        • 1970-01-01
        • 2016-03-05
        • 2022-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-11
        • 1970-01-01
        相关资源
        最近更新 更多