Как обрабатывать Facebook-шеринг / лайки с URL-адресами hashbang?

StackOverflow https://stackoverflow.com/questions/8893288

Вопрос

Я создаю веб-сайт, на котором с домашней страницы я открою какой-то другой URI на веб-сайте в лайтбокс (AJAX), и я хочу использовать состояние push HTML5 и хэш-запросы в качестве запасного варианта для управления изменениями состояний. p>

Теперь я хочу, чтобы URL-адреса можно было сканировать, а Facebook - для публикации / просмотра.

Если браузер пользователя поддерживает состояние отправки HTML5, нет проблем, он может поделиться URL-адресом (например, http://myserver/example), и Facebook найдет соответствующие мета-данные OG в статическом содержимом.

Но если пользователь использует браузер HTML4, у него будет URL-адрес, например, http://myserver/#!/example. и я хочу, чтобы он все равно мог поделиться этим через facebook ...

Теперь похоже, что Facebook поддерживает метод замены _escaped_fragment_, поэтому я бы просто перенаправил запросы из http://myserver/?_escaped_fragment_=/example генерировать код и все должны быть счастливы…

Итак, я добавил условие перезаписи в свой htaccess:

общий

Моя проблема в том, что я не могу заставить его работать с Facebook, с линтером Facebook кажется, что процент все время ускользает от части URL-адреса после хэшбэнга, в результате чего URL-адреса http://myserver/example, который соответствует 404 :-(

Кто-нибудь знает, как заставить Facebook не экранировать эту часть URL-адреса? Могу ли я что-нибудь сделать на стороне apache mod_rewrite?

Я также открыт для любой другой действующей стратегии URL-адресов для сканирования и просмотра URL с помощью ajax;)

Это было полезно?

Решение 2

Я закончил использовать заголовок PHP () Redirect, который отлично работает:

if(isset($_GET['_escaped_fragment_'])) {
    Header( "HTTP/1.1 301 Moved Permanently" );
    header('Location: http://'.$_SERVER['HTTP_HOST'].$_GET['_escaped_fragment_']);
    die();
}
.

Я не знаю, почему я сбежал персонажей при выполнении этого с помощью состояния Rewrite HTACCESS.

Другие советы

Думаю, ответ на http://facebook.stackoverflow.com/questions/ 8896773 / opengraph-on-ajax-based-website дает несколько действительно полезных советов, как этого добиться.

Вот содержание:


Нет. Разметка Open Graph должна присутствовать на HTML-страницах, которые можно получить с помощью чистого HTTP.

Это связано с тем, что, когда пользователь взаимодействует с объектом OG (например, выполняет действие и т. д.), Facebook выполняет HTTP GET для URL-адреса OG и ожидает увидеть теги OG, возвращенные в разметке.

Решение состоит в том, чтобы создать канонические URL-адреса для каждого из ваших объектов. Эти URL-адреса содержат базовую разметку HTML, включая теги OG.

При запросах к этим URL-адресам, если вы видите входящую строку агента-пользователя, содержащую «facebookexternalhit», вы визуализируете HTML-код. Если вы этого не сделаете, вы обслуживаете 302, который перенаправляет на ваш URL-адрес ajax. В URL-адресах ajax ваши кнопки Like и любые действия OG, которые вы публикуете, должны указывать на объект канонического URL-адреса

Пример:

Как пользователь, я нахожусь на http://yoursite.com/#!/artists/ моне . Я нажимаю кнопку «Нравится» или публикую действие, но параметр href кнопки «Нравится» или URL-адрес объекта, когда вы публикуете действие, должен быть каноническим URL-адресом объекта в Интернете - в этом случае, возможно, http://yoursite.com/artists/monet

Когда пользователь, использующий браузер, открывает http://yoursite.com/artists/monet , вам следует перенаправьте их на http://yoursite.com/#!/artists/monet , но если входящий пользовательский агент говорит, что это парсер Facebook, вы просто возвращаете разметку, которая представляет художника Моне.

Примеры из реальной жизни см. в Deezer, Rdio и Mog, которые все используют этот шаблон проектирования.

Если вы используете следующий синтаксис, вы можете поделиться URL-адресами hashbang на facebook: https://stackoverflow.com/a/6138879/372838

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top