2012-01-17 3 views
15

Я создаю веб-сайт, где с домашней страницы я открою какой-то другой URI на веб-сайте в лайтбокс (AJAX), и я хочу использовать состояние push5 и хеширование HTML5 как резерв для управления изменениями состояний.Как обращаться с facebook sharing/like с URL-адресами hashbang?

Теперь я хочу, чтобы URLs быть сканируются и Facebook разделяемых/симпатичный ..

Если браузер пользователя поддерживает 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 af ter hashbang, что приводит к URL-адресам, таким как http://myserver/%2Fexample, который приземляется на 404 :-(

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

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

ответ

4

я закончил с помощью заголовка PHP() перенаправлять, которая работает отлично:

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

Я не знаю, почему я получил экранированные символы, делая это с условием Htaccess переписать.

+0

Пожалуйста, несколько деталей –

16

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

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


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

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

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

При запросе на эти URL-адреса, если вы видите строку входящего пользователя, содержащую «facebookexternalhit», вы визуализируете HTML. Если вы этого не сделаете, вы обслуживаете 302, который перенаправляет ваш URL-адрес ajax. На Аякса URL, ваши как кнопки и любые действия, которые вы публикуете О.Г. следует указать каноническую объект 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, которые используют этот шаблон дизайна.

+0

Да, это потому, что «Open Graph Разметка должна присутствовать на HTML-страницах, которые GETable с чистой HTTP», что я хочу, чтобы перенаправить фейсбук на «реальный» URL-адрес http://yoursite.com/artists/monet. Я не могу найти, как перенаправить их с помощью правил htaccess, но я закончил работу с местоположением заголовка php, и он работает хорошо. Теперь facebook видит чистые URL-адреса с OG metas, когда пользователь хочет разделить URL-адрес с hashbang. – skiplecariboo

+0

Там ya go! Рад помочь. – DMCS

+1

Спасибо, сэр за хорошее объяснение! –

Смежные вопросы