2014-02-25 93 views
0

我已經構建了一個AngularJS應用程序,它包含的視圖可以被認爲是不同的頁面,但該應用程序是單頁面應用程序,因爲該頁面不會重新加載。Ajax生成的內容和Facebook抓取

我已閱讀過使用轉義片段URL將搜索引擎重定向到頁面快照。我的問題是,當我嘗試在Facebook上分享我的應用中的一個頁面時,它返回一個404,如使用Facebook's open graph debug tool可以看到的。

我的應用程序有一個Larvel後端饋送到AngularJS前端,我的htaccess看起來像這樣將蜘蛛和Facebook重定向到快照。據我所知,這是工作,但我想這不是。

<IfModule mod_rewrite.c> 
    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine On 

    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

    RewriteCond %{QUERY_STRING} ^_escaped_fragment_=/?(.*)$ 
    RewriteRule ^(.*)$ /%1? [NC,PT] 

    # Redirect Trailing Slashes... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    # Handle Front Controller... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 
</IfModule> 

我的網址被格式化爲喜歡的用戶:domain.com/#!/bike/id/bike+name 和快照的URL是相同的只是沒有散列砰即domain.com/bike/身份證/自行車+名稱

我真的愣在這一個。任何建議或指針將不勝感激。

回答

0

Facebook抓取工具不執行任何Javascript,因此他們不會看到/不知道您的Angular路線。我在我的項目中所做的是我鏡像了後端需要開放圖標記的路線。

如果我的服務器獲取帶有og標籤的頁面請求,它將進行必要的API調用以獲取數據,並將它們附加到索引模板。如果我的初始請求是一個沒有og-tags的頁面,我只需呈現常規的SPA索引。 (我使用的HTML5模式的網址,所以可能會有點不同)

另外請注意,我說初始請求到服務器。這意味着當您在SPA內導航時,您的og-標籤不會改變,它們只是您請求的第一頁的標籤。這實際上是一個非問題,因爲Facebook會向個人請求服務器。

讓我知道如果這不清楚,我會盡力解釋更好。

+0

我不確定您是否已經在後端嘗試類似的東西(不知道Larvel,我使用NodeJS/Express)。無論如何,這個問題必須在後端解決,而不是Angular。 – NicolasMoise

+0

我想我會幫你。我試着做同樣的事情,但是因爲我在使用#!我可能試圖做的網址略有不同。所以你不需要將機器人重定向到服務器端頁面,因爲你使用的URL結構幾乎相同,並且抓取工具被髮送到服務器生成的頁面,對吧? – BarryWalsh

+0

是的,你只需要找出一種方法讓你的服務器解釋你的url的'#!/ bike/id/bike + name'部分當用戶發出初始請求 – NicolasMoise