如何处理脸书分享/喜欢与hashbang网址



我正在构建一个网站,在主页上,我会将网站上的一些其他URI打开到一个灯箱(AJAX)中,我想使用HTML5推送状态和hash bangs作为管理状态更改的后备方案。

现在我希望网址是可爬网的,Facebook是可共享/可点赞的。。

如果用户浏览器支持HTML5推送状态,没问题,他可以共享URL(例如:http://myserver/example),Facebook会在静态内容中找到合适的OG元。

但如果用户使用HTML4浏览器,他将拥有类似http://myserver/#!/example的url。我希望他无论如何都能通过脸书分享。。。

现在看起来Facebook支持_escaped_fragment_替换方法,所以我想我只是重定向来自http://myserver/?_escaped_fragment_=/example的请求至http://myserver/example每个人都应该高兴…

所以我在htaccess中添加了一个重写条件:

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=([^&]*)
RewriteRule .* http://%{HTTP_HOST}/%1? [R=301,L,NE]

我的问题是,我无法使它与Facebook一起工作,使用Facebook linter,它似乎总是百分比地逃离哈希爆炸后的URL部分,导致URL像降落到404:-()的http://myserver/%2Fexample

有人知道如何欺骗脸书不逃离URL的这一部分吗?我可以在apachemod_rewrite方面做点什么吗?

我也对任何其他有效的ajax可爬网/可点赞URL策略持开放态度;)

我认为答案在http://facebook.stackoverflow.com/questions/8896773/opengraph-on-ajax-based-website就如何实现这一点提供了一些非常好的建议。

内容如下:


没有。Open Graph标记必须存在于可通过纯HTTP获取的HTML页面上。

这是因为当用户与OG对象交互时(比如执行操作等),Facebook会对OG URL执行HTTPGET,并期望在标记中看到返回的OG标记。

解决方案是为每个对象创建规范的URL。这些URL包含基本的HTML标记,包括OG标记。

在对这些URL的请求中,如果看到包含"facebookexternalhit"的传入useragent字符串,则呈现HTML。如果您不这样做,您将提供一个302重定向到您的ajax URL。在ajax URL上,您发布的类似按钮和任何OG操作都应该指向规范的URL对象

示例:

作为用户,我在http://yoursite.com/#/艺术家/monet。我点击了一个点赞按钮,或者发布了一个操作,但点赞按钮的href参数,或者发布操作时对象的URL,应该是该对象的可在网络上点击的规范URL——在这种情况下,也许http://yoursite.com/artists/monet

当使用浏览器的用户点击http://yoursite.com/artists/monet你应该将它们重定向到http://yoursite.com/#/艺术家/莫奈,但如果传入的用户代理说这是Facebook的scraper,你只需返回代表艺术家莫奈的标记。

有关真实世界的示例,请参阅Deezer、Rdio和Mog,他们都使用这种设计模式。

我使用php-header()重定向结束,它非常有效:

if(isset($_GET['_escaped_fragment_'])) {
    Header( "HTTP/1.1 301 Moved Permanently" );
    header('Location: http://'.$_SERVER['HTTP_HOST'].$_GET['_escaped_fragment_']);
    die();
}

我不知道为什么在使用htaccess重写条件时会出现转义字符。

如果您使用以下语法,您可以在facebook上共享hashbang URL:https://stackoverflow.com/a/6138879/372838

最新更新