Как обращаться с 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/...