小编典典

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

ajax

我正在建立一个网站,从主页我将在网站上打开其他一些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上,它似乎始终在哈希爆炸之后始终将URL的一部分转义,导致url
http://myserver/%2Fexample降落到404 :-(

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

我也愿意接受其他任何有效的Ajax可抓取/喜欢的URL策略;)


阅读 510

收藏
2020-07-26

共1个答案

小编典典

我结束了使用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重写条件时会出现转义字符。

2020-07-26