MrPierre Posté 25 Septembre 2010 Posté 25 Septembre 2010 Salut à tous ! Dites, on m'a appris il y a peu à faire de l'url rewriting en jouant sur l'ouverture d'une apge d'erreur 404, mais j'ai trouvé cette méthode peu élégante et certainement "rameuse". Quelqu'un sais comment faire autrement ? Pourriez-vous m'indiquer un tuto éventuellement ? : ) Merci d'avance !
Dan Posté 25 Septembre 2010 Posté 25 Septembre 2010 Le tuto n'est pas loin... tout simplement dans les publications du Hub : http://www.webmaster-hub.com/publication/Mod_rewrite-ou-la-reecriture-des.html
MrPierre Posté 25 Septembre 2010 Auteur Posté 25 Septembre 2010 Ahaaa, très bien. Mais petit détail que je n'avais signalé : le texte réécrit doit être chargé via une requête SQL, chose impossible à faire dans un htaccess. Ce qu'il y a c'est que j'aimerais réécrire les urls "façon wikipédia". Ils chargent le titre et l'url est certainement réécrite ainsi : fr.wikipedia.org/wiki/article=800 --> fr.wikipedia.org/wiki/Principe_de_relativité (ou quelque chose comme ça).
captain_torche Posté 25 Septembre 2010 Posté 25 Septembre 2010 Le plus simple est de faire un rewriting du genre : site.com/80-nom-de-l-article.html. Il te suffit ensuite de récupérer l'identifiant pour afficher ta page. A cela, deux inconvénients majeurs : - cela n'est pas très adapté aux sites où il y a différents types de contenu (Il faut prévoir un schéma de rewriting différent pour les articles, pour les news, etc). - la chaîne de caractères n'est pas utile : on peut très bien écrire site.com/80-j-aime-les-courgettes.html, on atterrira sur la même page. Il y a donc risque de duplicate content. Pour faire un véritable url rewriting bien propre, du genre site.com/nom-de-l-article.html, ce n'est pas aussi simple ! Il te faudra d'abord créer une table intermédiaire pour stocker les urls. Dans cette table, tu enregistres l'identifiant de l'url, celui de l'objet ciblé, le type d'objet ciblé (article, news, fiche utilisateur ...), l'url et la date de création de l'url. Fais bien attention de faire en sorte que le champ url soit bien unique : deux objets ne peuvent pas avoir la même adresse. Lors de la création d'une page, tu peux soit choisir une url manuellement, soit la générer en fonction du titre de la page (Tu peux lire à ce sujet mon article transformer un texte en url). Ensuite, une seule règle de réécriture te suffit : tu rediriges TOUT vers une seule et même page de traitement. Un règle du genre "RewriteRule ^(.*)\.html$ traitement.php?url=$1 [QSA,L]" suffira amplement. Cette page va vérifier que l'url est bien dans sa base (Si elle ne l'est pas, elle affichera une page d'erreur 404 avec l'en-tête adéquate) Ensuite, elle vérifiera à quel objet correspond l'adresse (id de l'objet, type de l'objet). Elle peut aussi vérifier, à l'aide de la date, qu'il n'y a pas d'url plus récente pour cette page. Si c'est le cas, on déclenche une redirection 301 vers l'url la plus récente (en fonction du champ date). A utiliser avec parcimonie toutefois, il ne faut réserver ces changements qu'aux rares cas où l'url aurait été mal écrite). Pour finir, elle affichera le bon gabarit (en fonction du type d'objet), et le bon contenu (en fonction de son ID). C'est donc une solution très propre, mais elle nécessite pas mal de développement en amont. Pour info, c'est ce que j'utilise sur mon site (Dans une version qui permet à deux utilisateurs d'utiliser la même url, les adresses étant également définies en fonction du nom de l'utilisateur). SPIP utilise aussi une solution similaire (Et sans doute plein d'autres CMS, que je ne connais pas aussi bien).
MrPierre Posté 25 Septembre 2010 Auteur Posté 25 Septembre 2010 (modifié) Fiouu, j'imaginais pas tant de complications ! Mais bon, je prends note de tes conseils et vais tenter de mettre tout ça en place. Merci capitaine Sinon sur ton site, tu emploies la méthode que tu décris ci-dessus ? Est-on obligé de conserver le .htm ? Modifié 25 Septembre 2010 par MrPierre
captain_torche Posté 25 Septembre 2010 Posté 25 Septembre 2010 Oui, c'est exactement ça, à la différence près que j'ajoute un champ "id utilisateur" à ma table, et que je vérifie l'unicité d'un enregistrement en fonction de son url ET de son id utilisateur. En gros, comme les pages sont du format "utilisateur/page.html", pas de risque à ce que deux utilisateurs aient le même nom pour une page. Et sinon, tu n'es pas obligé de mettre le .html, tu choisis l'extension que tu veux (ou l'absence d'extension), et tu fais tous tes urls de pages selon cette forme. Il faut bien entendu modifier l'url rewriting en conséquence.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant