我正在建立一个网站,从主页我将在网站上打开一些其他URI到一个灯箱(AJAX),我想使用HTML5推送状态和哈希刘海作为后备来管理状态的变化。
现在我希望网址可以抓取,Facebook可以共享/可爱..
如果用户浏览器支持HTML5推送状态,没问题,他可以共享URL(例如:http://myserver/example
),Facebook会在静态内容中找到合适的OG元数据。
但是如果用户使用HTML4浏览器,他将拥有类似http://myserver/#!/example
的网址。我希望他能够通过facebook分享它...
现在看起来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它似乎百分之一地逃脱了hashbang之后的URL的一部分,导致网址像
http://myserver/%2Fexample
登陆404: - (
有谁知道如何欺骗Facebook不逃避这部分网址? 我可以在apache mod_rewrite端做点什么吗?
我也对任何其他有效的ajax可抓取/可爱URL策略持开放态度;)
答案 0 :(得分:17)
我认为http://facebook.stackoverflow.com/questions/8896773/opengraph-on-ajax-based-website的答案为如何实现这一目标提供了一些非常好的建议。
以下是内容:
没有。 Open Graph标记必须存在于使用纯HTTP GETable的HTML页面上。
这是因为当用户与OG对象交互时(比如,执行操作等),Facebook将在OG URL上执行HTTP GET,并期望看到标记中返回的OG标记。
解决方案是为每个对象创建规范网址。这些URL包含基本的HTML标记,包括OG标记。
在对这些URL的请求中,如果您看到包含“facebookexternalhit”的传入useragent字符串,则呈现HTML。如果不这样做,则提供302重定向到您的ajax URL。在ajax URL上,您发布的类似按钮和任何OG操作应指向规范URL对象
示例:
作为用户,我在http://yoursite.com/#!/artists/monet。我点击一个like按钮,或者发布一个动作,但是你发布动作时,like按钮的href参数或对象的URL应该是对象的web命中规范URL - 在这种情况下,可能是http://yoursite.com/artists/monet
当使用浏览器的用户点击http://yoursite.com/artists/monet时,您应将其重定向到http://yoursite.com/#!/artists/monet,但如果传入的用户表示它是Facebook的刮刀,则只需返回代表艺术家Monet的标记。
对于真实世界的例子,请看Deezer,Rdio和Mog都使用这种设计模式。
答案 1 :(得分: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重写条件时我会获得转义字符。
答案 2 :(得分:-1)
如果您使用以下语法,则可以在Facebook上共享hashbang网址:https://stackoverflow.com/a/6138879/372838