Как обращаться с facebook sharing/like с URL-адресами hashbang?
Я создаю веб-сайт, где с домашней страницы я открою какой-то другой URI на веб-сайте в лайтбокс (AJAX), и я хочу использовать push5 push и хеширование HTML5 как резерв для управления изменениями состояний.
Теперь я хочу, чтобы URL-адреса выполнялись с возможностью сканирования, а Facebook - совместимыми и доступными.
Если пользовательский браузер поддерживает состояние push5 HTML5, не проблема, он может поделиться URL-адресом (например: http://myserver/example
), а Facebook найдет соответствующие метаданные OG в статическом контенте.
Но если пользователь использует браузер HTML4, у него будет URL-адрес, например 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-адреса после hashbang, что приводит к URL-адресам
http://myserver/%2Fexample
, который приземляется на 404: - (
Кто-нибудь знает, как обмануть Facebook, чтобы не ускользнуть от этой части URL-адреса?
Могу ли я что-то сделать на стороне apache mod_rewrite?
Я также открыт для любой другой действующей стратегии arawl crawlable/likeable URL;)
Ответы
Ответ 1
i закончил использовать перенаправление 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
Я думаю, что ответ на http://facebook.stackoverflow.com/questions/8896773/opengraph-on-ajax-based-website дает некоторые действительно хорошие советы о том, как это сделать.
Здесь содержимое:
Нет. Разметка Open Graph должна присутствовать на HTML-страницах, которые GETable с чистым HTTP.
Это связано с тем, что, когда пользователь взаимодействует с объектом OG (например, выполняет действие и т.д.), Facebook будет выполнять HTTP GET на URL OG и ожидать увидеть метки OG, возвращенные в разметке.
Решение состоит в создании канонических URL-адресов для каждого из ваших объектов. Эти URL-адреса содержат основную разметку HTML, включая теги OG.
При запросах к этим URL-адресам, если вы видите строку входящего пользователя, содержащую "facebookexternalhit", вы визуализируете HTML. Если вы этого не сделаете, вы обслуживаете 302, который перенаправляет ваш URL-адрес ajax. На URL-адресах ajax ваши похожие кнопки и любые опубликованные вами действия OG должны указывать на объект канонического URL-адреса
Пример:
Как пользователь, я нахожусь http://yoursite.com/#!/artists/monet. Я нажимаю подобную кнопку или публикую действие, но, например, параметр href кнопки или URL-адрес объекта, когда вы публикуете действие, должен быть веб-конкретизируемым каноническим URL-адресом для объекта - в данном случае, возможно, http://yoursite.com/artists/monet
Когда пользователь, использующий браузер, попадает в http://yoursite.com/artists/monet, вы должны перенаправить их на http://yoursite.com/#!/artists/monet, но если входящий пользовательский агент говорит, что это скребок Facebook, вы просто возвращаете разметку, которая представляет художника Моне.
Для примеров с реальным миром см. Deezer, Rdio и Mog, которые используют этот шаблон дизайна.
Ответ 3
Если вы используете следующий синтаксис, вы можете делиться хэш-сайтами на facebook: fooobar.com/info/63940/...