如何使用hashbang网址处理Facebook分享/喜欢?

ski*_*boo 17 ajax mod-rewrite facebook hashbang pushstate

我正在建立一个网站,从主页我将在网站上打开一些其他URI到一个灯箱(AJAX),我想使用HTML5推送状态和哈希刘海作为后备来管理状态的变化.

现在我希望网址可以抓取,Facebook可分享/可爱.

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

但是如果用户使用HTML4浏览器,他会有一个网址http://myserver/#!/example.我希望他能够通过facebook分享它...

现在看起来Facebook支持_escaped_fragment_替换方法,所以我只是将请求重定向http://myserver/?_escaped_fragment_=/examplehttp://myserver/example ,每个人都应该开心...

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

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

我的问题是,我不能使它与Facebook一起工作,有了Facebook linter它似乎百分之一的时候,在hashbang之后的URL部分逃脱,导致像http://myserver/%2Fexample其中的网址 到404 :-(

有谁知道如何欺骗Facebook不逃避URL的这一部分?我可以在apache mod_rewrite端做点什么吗?

我也对任何其他有效的ajax可抓取/可喜欢的URL策略持开放态度;)

DMC*_*MCS 18

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

这是内容:


不可以.在使用纯HTTP GETable的HTML页面上必须存在Open Graph标记.

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

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

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

例:

作为用户,我在http://yoursite.com/#!/artists/monet.我点击了一个类似的按钮,或者发布了一个动作,但是喜欢按钮的href参数,或者你发布动作时对象的URL应该是对象的web hittable规范URL - 在这种情况下,也许是http:// yoursite .COM /艺术家/莫奈

当使用浏览器的用户点击http://yoursite.com/artists/monet时,您应该将它们重定向到http://yoursite.com/#!/artists/monet,但如果传入的用户表示它是Facebook的刮刀,那么只返回代表艺术家莫奈的标记.

对于现实世界的例子,请看Deezer,Rdio和Mog都使用这种设计模式.


ski*_*boo 4

我最终使用了 php header() 重定向,效果非常好:

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

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