Pergunta

Eu estou construindo um site, onde a partir da página inicial, vou abrir alguns outros URI no site em um lightbox (AJAX), e eu quero usar HTML5 empurrar estado de hash e franja como uma alternativa para gerenciar as alterações de estados.

Agora, eu quero que as urls sejam rastreáveis e Facebook compartilhável/simpático..

Se o usuário navegador não suporta HTML5 empurrar estado, não tem problema, ele pode compartilhar a URL (por exemplo : http://myserver/example ) e Facebook vai encontrar o adequado OG metas no conteúdo estático.

Mas se o usuário utiliza um HTML4 navegador, ele terá uma url como http://myserver/#!/example.e eu quero que ele seja capaz de compartilhá-lo através de facebook, de qualquer forma...

Agora parece que o Facebook oferece suporte a _escaped_fragment_ método de substituição, então eu pensei que eu iria simplesmente redirecionar solicitações de http://myserver/?_escaped_fragment_=/example para http://myserver/example e toda a gente deve ser feliz...

Então eu adicionei uma reescrita condição para o meu .htaccess :

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=([^&]*)
RewriteRule .* http://%{HTTP_HOST}/%1? [R=301,L,NE]

O meu problema é que eu não posso fazê-lo funcionar com o Facebook, com o Facebook a linter parece por cento escapar o tempo todo a parte do URL após o hashbang, resultando em urls, como http://myserver/%2Fexample que as terras a um 404 :-(

Alguém sabe como enganar Facebook para não escapar a esta parte da URL ?Pode-se fazer algo no apache mod_rewrite do lado ?

Eu também estou aberto para qualquer outro válido ajax rastreável/simpático estratégia de URL ;)

Foi útil?

Solução 2

eu acabei usando php header() de redirecionamento, que funciona perfeitamente :

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

Eu não sei por que eu tenho de caracteres de escape quando a fazê-lo com o htaccess reescrever condição.

Outras dicas

Eu acho que a resposta em http://facebook.stackoverflow.com/questions/8896773/opengraph-on-ajax-based-website fornece alguns bons conselhos sobre como fazer isso acontecer.

Eis o conteúdo:


Não.Open Graph marcação deve estar presente em páginas HTML que são GETable com puro HTTP.

Isso é porque, quando um usuário interage com um OG objeto (como, executa uma ação, etc) Facebook irá realizar um HTTP GET no OG URL, e esperar para ver OG tags voltou na marcação.

A solução é criar URLs canônicos para cada um de seus objetos.Essas URLs contém marcas HTML básicas, incluindo OG tags.

Sobre os pedidos a essas URLs, se você ver a entrada useragent seqüência de caracteres que contém 'facebookexternalhit', em seguida, você processar o HTML.Se não, você servir a 302 que redireciona para seu URL em ajax.No ajax de URLs, o seu como botões e qualquer OG ações que você publicar deve apontar para a URL canônica objeto

Exemplo:

Como um usuário, eu estou http://yoursite.com/#!/artistas/monet.Eu clicar em um botão "curtir", ou publicar uma ação, mas o botão like do parâmetro href ou o URL do objeto quando você postar a ação deve ser um web hittable URL canônica para o objeto - neste caso, talvez http://yoursite.com/artists/monet

Quando um usuário usando um navegador hits http://yoursite.com/artists/monet você deve redirecioná-los para http://yoursite.com/#!/artistas/monet, mas , se a entrada de agente diz que é o Facebook do raspador, você acabou de voltar de marcação que representa o artista Monet.

Para exemplos do mundo real, consulte o Deezer, Rdio e Mog que todos usam este padrão de design.

Se você usar a sintaxe a seguir você pode compartilhar hashbang urls no facebook: https://stackoverflow.com/a/6138879/372838

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top