17

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

现在我希望这些网址可以抓取并且 Facebook 可以分享/喜欢..

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

但是如果用户使用 HTML4 浏览器,他将有一个类似http://myserver/#!/example. 无论如何我希望他能够通过Facebook分享它......

现在看起来 Facebook 支持 _escaped_fragment_ 替换方法,所以我只是将请求从http://myserver/?_escaped_fragment_=/example to重定向http://myserver/example ,每个人都应该很高兴......</p>

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

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

我的问题是我不能让它与 Facebook 一起工作,使用 Facebook linter 它似乎总是在 hashbang 之后的 URL 部分一直进行百分比转义,导致 url 像 http://myserver/%2Fexamplewhich 降落到 404 :-(

有人知道如何欺骗 Facebook 不转义这部分 URL 吗?我可以在 apache mod_rewrite 方面做点什么吗?

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

4

3 回答 3

18

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

内容如下:


不可以。Open Graph 标记必须出现在可通过纯 HTTP 获取的 HTML 页面上。

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

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

在对这些 URL 的请求中,如果您看到传入的用户代理字符串包含“facebookexternalhit”,那么您将呈现 HTML。如果你不这样做,你会提供一个 302 重定向到你的 ajax URL。在 ajax URL 上,您的点赞按钮和您发布的任何 OG 操作都应指向规范的 URL 对象

例子:

作为用户,我在http://yoursite.com/#!/artists/monet上。我单击一个赞按钮,或发布一个操作,但赞按钮的 href 参数或发布操作时对象的 URL 应该是该对象的 Web 可点击规范 URL - 在这种情况下,可能是http://yoursite .com/artists/monet

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

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

于 2012-01-17T17:39:57.157 回答
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();
}

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

于 2012-01-17T23:46:17.387 回答
-1

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

于 2012-09-13T10:17:22.330 回答