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_=/example
到http://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都使用这种设计模式.
我最终使用了 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 重写条件时会出现转义字符。
| 归档时间: |
|
| 查看次数: |
15329 次 |
| 最近记录: |