我正在建立一个网站,从主页我将在网站上打开其他一些URI到灯箱(AJAX)中,并且我想使用HTML5推送状态和哈希爆炸作为后备来管理状态变化。
现在,我希望这些网址是可抓取的,并且Facebook可共享/可喜。
如果用户浏览器支持HTML5推送状态,没问题,他可以共享URL(例如http://myserver/example:),Facebook将在静态内容中找到适当的OG元数据。
http://myserver/example
但是,如果用户使用HTML4浏览器,则他将拥有网址,例如http://myserver/#!/example。而且我希望他无论如何都能通过Facebook分享…
http://myserver/#!/example
现在看来Facebook支持_escaped_fragment_替换方法,因此我虽然将请求重定向http://myserver/?_escaped_fragment_=/example 至http://myserver/example ,但每个人都应该很高兴……
http://myserver/?_escaped_fragment_=/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 :-(
http://myserver/%2Fexample
有谁知道如何欺骗Facebook不要转义URL的这一部分?我可以在apache mod_rewrite方面做些什么吗?
我也愿意接受其他任何有效的Ajax可抓取/喜欢的URL策略;)
我结束了使用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重写条件时会出现转义字符。