2014-05-23 69 views
0

我的應用程序我有一個簡短的。例如www.example.com/Asy重定向到www.facebook.com/idShortener不會與Facebook工作鏈接

如果一個Facebook頁面上的鏈接其他人分享,Facebook的某種方式傳遞我的網址,直接在這種情況下,把鏈接至Facebook,所以當有人點擊Facebook上這個鏈接我無法追蹤點擊次數。

我使用的代碼是這樣的:

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即可使用。

回答

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); 
    } 

} 
0

Facebook的鏈接分析已經改變了它的行爲,前一段時間。它現在遵循HTTP重定向,直到達到最終URL,並將其用於結束客戶端。當您使用Facebook debug tool調試您的URL時,這清晰可見。

HTTP 301重定向意味着「永久重定向」。 Facebook非常正常,因爲這是所有瀏覽器都能做到的。例如。如果你要在你的瀏覽器中插入一個鏈接,該鏈接使用301重定向到另一個頁面 - 第一個命中將被翻譯/記錄,下面的鏈接將重定向,甚至沒有短URL服務(如果你使用任何)。 爲了避免瀏覽器自動重定向,您應該將HTTP狀態重定向行爲從301更改爲302,這意味着「臨時重定向」。但是,這不會解決Facebook問題。

我成功迫使Facebook使用重定向而不是最後一個顯示短網址的唯一方法是publishing through Facebook API,結合302狀態。通過API創建的帖子仍然顯示鏈接,因爲它是在數據中提供的;然而,因爲它是Facebook(doh!),所以不能保證他們的開發者會改變行爲,並且也會開始跟隨重定向。

如果您使用的是YOURLS縮短版服務,那麼會有一個非常棒的名爲「302-instead」,將301重定向更改爲302.