我的应用程序我有一个缩短程序。例如,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,它就有效。
答案 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.