2012-01-17 16 views
15

Estoy construyendo un sitio web donde desde la página de inicio abriré algún otro URI en el sitio web en un lightbox (AJAX), y quiero usar HTML5 push state y hash bangs como una alternativa para administrar cambios de estados.¿Cómo manejar el uso compartido de Facebook/me gusta con las URL de hashbang?

ahora quiero las URLs sean rastreables y Facebook compartible/simpática ..

Si el navegador del usuario soporta HTML5 estado de empuje, no hay problema, se puede compartir la dirección (por ejemplo: http://myserver/example) y Facebook encontrará las metas OG apropiadas en el contenido estático.

Pero si el usuario utiliza un navegador HTML4, tendrá una url como http://myserver/#!/example. y yo quiero que él sea capaz de compartirlo a través de facebook de todos modos ...

Ahora parece que Facebook es compatible con el método de sustitución _escaped_fragment_, así que aunque me gustaría simplemente redirigir las peticiones de http://myserver/?_escaped_fragment_=/example a http://myserver/example y todo el mundo debe ser feliz ...

por lo que añade una condición de reescritura a mi htaccess:

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

mi problema es que no puedo hacer que funcione con Facebook, con Facebook linter parece ciento de escape de todo el tiempo la parte de la UR L después de la Hashbang, lo que resulta en URLs como http://myserver/%2Fexample que las tierras a un :-(404

¿Alguien sabe cómo engañar a Facebook para que no se escape esta parte de la URL? ¿Puedo hacer algo en el lado apache mod_rewrite?

También estoy abierto a cualquier otra estrategia válida ajax URL rastreable/agradable;)

Respuesta

4

Terminé usando un php header() redirigir, que funciona a la perfección:

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

No sé por qué me caracteres de escape cuando se hace con la condición de reescritura .htaccess.

+0

Por favor, algunos detalles –

16

Creo que la respuesta a http://facebook.stackoverflow.com/questions/8896773/opengraph-on-ajax-based-website ofrece algunos realmente buenos consejos sobre cómo hacer que esto suceda.

Aquí está el contenido:


Nº Open Graph de marcado debe estar presente en las páginas HTML que son getable con HTTP pura.

Esto se debe a que cuando un usuario interactúa con un objeto OG (como, realiza una acción, etc.) Facebook realizará un HTTP GET en la URL OG, y espera ver etiquetas OG devueltas en el marcado.

La solución es crear URL canónicas para cada uno de sus objetos. Estas URL contienen marcado HTML básico que incluye etiquetas OG.

En solicitudes a estas URL, si ve la cadena de caracteres de entrada entrante que contiene 'facebookexternalhit', entonces renderiza el HTML. Si no lo hace, sirve un 302 que redirige a su URL de Ajax. En las direcciones URL ajax, sus botones como ya cualquier acción OG publicas debe apuntar al objeto URL canónica

Ejemplo:

Como usuario, estoy en http://yoursite.com/#!/artists/monet.Hago clic en un botón Me gusta o publico una acción, pero el parámetro href del botón Me gusta, o la URL del objeto cuando publica la acción debe ser una URL canónica para el objeto, en este caso, quizás http://yoursite.com/artists/monet

Cuando un usuario que utiliza un navegador acceda al http://yoursite.com/artists/monet, debe redirigirlos al http://yoursite.com/#!/artists/monet, pero si el agente de entrada entrante dice que es el raspador de Facebook, simplemente devuelve el marcado que representa al artista Monet.

Para ejemplos del mundo real, vea a Deezer, Rdio y Mog, quienes usan este patrón de diseño.

+0

Sí, es porque "Open Graph de marcado debe estar presente en las páginas HTML que son getable con HTTP pura" que quiero redirigir facebook la url "real" http://yoursite.com/artists/monet. No puedo encontrar cómo redirigirlos con las reglas de htaccess, pero terminé haciéndolo con una ubicación de encabezado php y funciona bien. Ahora Facebook ve URLs limpias con metas OG cuando un usuario quiere compartir una URL con un hashbang. – skiplecariboo

+0

¡Ya está! Encantado de ayudar. – DMCS

+1

¡Gracias señor por la buena explicación! –

Cuestiones relacionadas