Как справиться с общим доступом к Facebook / как с URL-адресами hashbang? - PullRequest
16 голосов
/ 17 января 2012

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

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

Если браузер пользователя поддерживает push-состояние 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, похоже,Процент-экранирование все время часть URL после хеш-бенга, в результате чего URL, такие как http://myserver/%2Fexample, приводят к 404: - (

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

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

Ответы [ 3 ]

17 голосов
/ 17 января 2012

Я думаю, что ответ на 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-адресам, если вы видите входящую строку useragent, содержащую 'facebookexternalhit', вы визуализируете HTML. Если вы этого не сделаете, вы обслуживаете 302, который перенаправляет на ваш адрес 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, которые все используют этот шаблон проектирования.

4 голосов
/ 18 января 2012

я закончил с помощью перенаправления 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.

0 голосов
/ 13 сентября 2012

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

...