2014-02-25 52 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