Question

Je construis un site Web sur lequel, à partir de la page d'accueil, j'ouvrirai un autre URI du site Web dans une lightbox (AJAX), et je souhaite utiliser l'état push HTML5 et les coups de hachage comme solution de secours pour gérer les changements d'état.

Maintenant, je veux que les URL soient explorables et partageables/likeables sur Facebook.

Si le navigateur de l'utilisateur supporte le push state HTML5, pas de problème, il peut partager l'URL (par exemple : http://myserver/example ) et Facebook trouvera les métas OG appropriées dans le contenu statique.

Mais si l'utilisateur utilise un navigateur HTML4, il aura une url comme http://myserver/#!/example.et je veux qu'il puisse le partager via Facebook de toute façon...

Il semble maintenant que Facebook prenne en charge la méthode de remplacement _escaped_fragment_, donc j'ai pensé que je redirigerais simplement les demandes de http://myserver/?_escaped_fragment_=/exampleà http://myserver/exampleet tout le monde devrait être content…

J'ai donc ajouté une condition de réécriture à mon htaccess :

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

Mon problème est que je n'arrive pas à le faire fonctionner avec Facebook, avec Facebook linter, il semble échapper tout le temps à un pourcentage de la partie de l'URL après le hashbang, ce qui donne des URL commehttp://myserver/%2Fexample qui atterrit sur un 404 :-(

Est-ce que quelqu'un sait comment tromper Facebook pour qu'il n'échappe pas à cette partie de l'URL ?Puis-je faire quelque chose du côté Apache mod_rewrite ?

Je suis également ouvert à toute autre stratégie d'URL ajax explorable/likeable valide ;)

Était-ce utile?

La solution 2

J'ai fini à l'aide d'un en-tête PHP () Redirection, qui fonctionne parfaitement:

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

Je ne sais pas pourquoi j'ai été échappé des personnages en le faisant avec la condition de réécriture HTACCESS.

Autres conseils

Je pense que la réponse à http://facebook.stackoverflow.com/questions/8896773/opengraph-on-ajax-based-website fournit de très bons conseils sur la façon d’y parvenir.

Voici le contenu :


Non.Le balisage Open Graph doit être présent sur les pages HTML qui sont GETable avec HTTP pur.

En effet, lorsqu'un utilisateur interagit avec un objet OG (comme, effectue une action, etc.), Facebook effectuera un HTTP GET sur l'URL OG et s'attendra à voir les balises OG renvoyées dans le balisage.

La solution est de créer des URL canoniques pour chacun de vos objets.Ces URL contiennent un balisage HTML de base, notamment des balises OG.

Lors des requêtes adressées à ces URL, si vous voyez la chaîne d'agent utilisateur entrant contenant « facebookexternalhit », vous affichez le code HTML.Si vous ne le faites pas, vous envoyez un 302 qui redirige vers votre URL ajax.Sur les URL ajax, vos boutons J'aime et toutes les actions OG que vous publiez doivent pointer vers l'objet URL canonique

Exemple:

En tant qu'utilisateur, je suis sur http://votresite.com/#!/artists/monet.Je clique sur un bouton J'aime ou je publie une action, mais le paramètre href du bouton J'aime ou l'URL de l'objet lorsque vous publiez l'action doit être une URL canonique accessible sur le Web pour l'objet - dans ce cas, peut-être http://votresite.com/artists/monet

Lorsqu'un utilisateur utilisant un navigateur clique sur http://votresite.com/artists/monet vous devriez les rediriger vers http://votresite.com/#!/artists/monet, mais si l'agent utilisateur entrant dit qu'il s'agit du scraper de Facebook, vous renvoyez simplement le balisage qui représente l'artiste Monet.

Pour des exemples concrets, voir Deezer, Rdio et Mog qui utilisent tous ce modèle de conception.

Si vous utilisez la syntaxe suivante, vous pouvez partager des URL de hashbang sur Facebook: https://stackoverflow.com/a/6138879/372838

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top