Shortener不会使用Facebook链接

时间:2014-05-23 11:01:54

标签: facebook laravel url-redirection

我的应用程序我有一个缩短程序。例如,www.example.com/Asy重定向到www.facebook.com/id

如果有人在Facebook页面上共享该链接,Facebook会以某种方式通过我的URL并直接将链接发送到Facebook,因此,当有人点击Facebook上的链接时,我无法跟踪点击次数。< / p>

我使用的代码是这样的:

public function redirect($uri){
    $link = Link::where('uri',$uri);
    // Save number of click in database
    return Redirect::to($link->real_url);
}

如果我想重定向到google.com一切都很好,但Facebook时间轴上的Facebook页面无法正常工作。

如果有人将这个链接放在Twitter上,首先访问我的应用程序然后重定向到Facebook,它就有效。

2 个答案:

答案 0 :(得分:3)

听起来像Facebook跟随重定向,意识到它指向自己 - 并将用户留在Facebook内。您可以尝试检测谁正在访问您的页面,看看它是否是一个Facebook抓取工具,并欺骗它允许链接

public function redirect($uri){
    if (in_array($_SERVER['HTTP_USER_AGENT'], array(
      'facebookexternalhit/1.1 (+https://www.facebook.com/externalhit_uatext.php)',
      'facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)'
    ))) 
    {
      // It is probably a Facebook bot
      // So put a fake page here.
      // Note - dont redirect this fake link - or FB might follow the fake link
      return View::make('fake.page');
    }
    else {
      //that's not Facebook - so show the real link
      $link = Link::where('uri',$uri);
      // Save number of click in database
      return Redirect::to($link->real_url);
   }

}

答案 1 :(得分:0)

Facebook链接解析已经改变了它的行为。它现在遵循HTTP重定向,直到达到最终URL,并将其用于终端客户端。使用Facebook debug tool调试网址时,此信息清晰可见。

HTTP 301重定向表示“永久重定向”。这是非常正常的,Facebook遵循它 - 因为这是所有浏览器也做的。例如。如果你要在你的浏览器中插入一个链接,它使用301重定向到另一个页面 - 第一次点击将被翻译/记录,下面的链接将有重定向,甚至没有点击短URL服务(如果你使用任何)。 要避免浏览器自动重定向,您应该将HTTP状态重定向行为从301更改为302,这意味着“临时重定向”。但是,这不会解决Facebook问题。

我成功迫使Facebook显示带有重定向的短网址而不是最终网址的唯一方法是publishing through Facebook API,结合302状态。通过API创建的帖子仍然显示数据中提供的链接;然而,因为它是Facebook(doh!),所以不能保证他们的开发人员会改变行为并且也会开始关注重定向。

如果你正在使用YOURLS缩短服务,那就有一个很棒的叫做“302-instead”,它将301重定向更改为302.