Récapitulatif sur la réorganisation du site ! - Partie 2

Ce topic permet d'afficher clairement les news qui sont sur le site.
Règles du forum
Ce topic permet à tous le monde de créer ses news. Celles-ci seront directement afficher sur le site lui même. C'est pourquoi chaque news devra être validée par un modérateur ou par l'administrateur avant que celle-ci n'apparaisse. Ne vous étonnez donc pas si votre news n'est pas visible immédiatement (elle le sera dans les minutes qui suivent !).

ATTENTION: Vous ne pouvez pas poster de sujet simple. Il vous faudra obligatoirement cocher la case "Annonce" (et non pas annonce globale) qui se trouve sous votre message pour que votre news soient acceptées !

Récapitulatif sur la réorganisation du site ! - Partie 2

Message par Martial » 22 Mai 2009, 01:57

Quel :insulte: :insulte: j'ai dû envoyer mon message en deux fois ! 60 000 caractères, c'est un peu abusé de fixer une telle limite ! :( M'enfin, voici la suite, désolé pour la méchante coupure que ce méchant forum a provoqué !

=> Si vous n'avez pas lu la première partie, n'essayez même pas de vous aventurez dans la lecture de cette seconde partie (sauf armé de cachets d'aspirines ^^ et encore, je me demande si une corde ne serait pas plus efficace lol). Allez vite lire la première partie: ICI

L'URL Rewriting et le référencement

Une fois tout cette organisation mise en place, il m'a fallu réfléchir sur l'URL Rewriting car l'ancien .htaccess était alors complètement dépassé ! Pour information, l'URL Rewriting (Réécriture d'URL en Anglais) est ce qui permet de modifier l'url de la page que vous appelez dans la barre d'adresse tout en affichant la même chose. Petit exemple: http://www.final-rpg.com/index.php?sect ... _fantasy_1 pourra devenir http://www.final-rpg.com/final_fantasy_1.html avec l'URL Rewriting, et pourtant, ça mènera exactement à la même page. Ça à donc un rapport avec les variables GET encore une fois, mais aussi avec le référencement (référencement <=> placement du site dans les moteurs de recherche). En effet, Google, pour ne citer que lui, a dû mal à digérer les adresses avec une tonnes de variables GET du style: http://www.final-rpg.com/index.php?sect ... =mage_noir (ici on a 3 variables GET différentes => au bout de 2, ça fait trop pour un moteur de recherche). C'est pour ça qu'une adresse comme ça: http://www.final-rpg.com/final_fantasy_ ... _noir.html convient bien mieux niveau référencement ! C'est aussi beaucoup lisible et facile à retenir !

Rentrant maintenant dans les entrailles du fichier .htaccess qui permet de faire cette modification. Attention, je préviens tout de suite, c'est assez difficile à comprendre quand on ne connait pas car on utilise les expressions régulières (REGEX), ce qui n'est pas forcément compliqué, mais qui peut très vite repoussé car on tombe régulièrement sur des trucs du type: ^([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ Ce qu'il faut retenir ici, c'est que "[0-9a-zA-Z_-]+" signifie "n'importe quel caractère".

Dans l'ancienne organisation, le fichier .htaccess était vraiment affreux. J'avais écrit beaucoup de ligne inutile, et pour preuve, je devais le modifier à chaque fois qu'une nouvelle section venait à entrer sur le site ! Petit exemple avec la section Final fantasy 1:

Code : Tout sélectionner
RewriteRule ^final_fantasy_1-([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_1.php?page=$1&sous_page=$2

RewriteRule ^final_fantasy_1-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_1.php?page=$1 [L]


Bon, prenons la deuxième ligne pour l'explication. Vous vous souvenez qu'avant, quand on écrivait "final_fantasy_1.php?page=introduction" par exemple, eh bien on tombais directement sur la page d'introduction de Final fantasy 1. Cette deuxième ligne peut être décomposé en deux parties (la première qui va de "^final_fantasy_1" à ".html$" et la seconde qui va de "/final_fantasy_1.php..." jusqu'à la fin). La première partie représente ce que l'utilisateur va taper dans la barre d'adresse, et la seconde partie ce ç quoi ça équivaut. La deuxième partie, justement, contient un "$1" juste après "?page=". Ce "$1" ce rapporte à la REGEX qui se trouve entre les parenthèse dans la première partie. Si on traduit, ça nous donne ça:

"Si on tape final_fantasy_1-introduction, alors c'est comme si on avait écrit /final_fantasy_1.php?page=introduction" => donc ça nous emmène aussi sur la page d'introduction de Final fantasy 1.

La deuxième commande permettait de prendre en compte une seconde variable GET.

Ces 2 instructions devaient donc être répétées autant de fois qu'il y a de section sur le site, en incluant, bien évidemment certains systèmes ! Ce qui nous donne un truc affreux du genre:

Code : Tout sélectionner
RewriteRule ^([0-9a-zA-Z]+)\.html$ /$1.php [L]

RewriteRule ^final_fantasy_crystal_chronicles\.html$ /$1.php [L]

RewriteRule ^zelda_tp-([0-9a-zA-Z_-]+)\.html$ /zelda_tp.php?page=$1 [L]



RewriteRule ^rpg_maker_xp-([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /rpg_maker_xp.php?page=$1&sous_page=$2

RewriteRule ^rpg_maker_xp-([0-9a-zA-Z_-]+)\.html$ /rpg_maker_xp.php?page=$1 [L]

RewriteRule ^rpg_maker_vx-([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /rpg_maker_vx.php?page=$1&sous_page=$2

RewriteRule ^rpg_maker_vx-([0-9a-zA-Z_-]+)\.html$ /rpg_maker_vx.php?page=$1 [L]

RewriteRule ^news-([0-9]+)-([0-9]+)\.html$ /news.php?news=$1&page=$2

RewriteRule ^news-([0-9]+)\.html$ /news.php?news=$1 [L]




RewriteRule ^final_fantasy_1-([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_1.php?page=$1&sous_page=$2

RewriteRule ^final_fantasy_1-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_1.php?page=$1 [L]


RewriteRule ^final_fantasy_2-([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_2.php?page=$1&sous_page=$2

RewriteRule ^final_fantasy_2-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_2.php?page=$1 [L]


RewriteRule ^final_fantasy_3-([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_3.php?page=$1&sous_page=$2

RewriteRule ^final_fantasy_3-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_3.php?page=$1 [L]


RewriteRule ^final_fantasy_4-([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_4.php?page=$1&sous_page=$2

RewriteRule ^final_fantasy_4-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_4.php?page=$1 [L]


RewriteRule ^final_fantasy_5-([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_5.php?page=$1&sous_page=$2

RewriteRule ^final_fantasy_5-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_5.php?page=$1 [L]


RewriteRule ^final_fantasy_6-([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_6.php?page=$1&sous_page=$2

RewriteRule ^final_fantasy_6-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_6.php?page=$1 [L]


RewriteRule ^final_fantasy_7-([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_7.php?page=$1&sous_page=$2

RewriteRule ^final_fantasy_7-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_7.php?page=$1 [L]


RewriteRule ^final_fantasy_8-([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_8.php?page=$1&sous_page=$2

RewriteRule ^final_fantasy_8-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_8.php?page=$1 [L]


RewriteRule ^final_fantasy_9-([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_9.php?page=$1&sous_page=$2

RewriteRule ^final_fantasy_9-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_9.php?page=$1 [L]


RewriteRule ^final_fantasy_10-([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_10.php?page=$1&sous_page=$2

RewriteRule ^final_fantasy_10-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_10.php?page=$1 [L]


RewriteRule ^final_fantasy_10_2-([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_10_2.php?page=$1&sous_page=$2

RewriteRule ^final_fantasy_10_2-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_10_2.php?page=$1 [L]


RewriteRule ^final_fantasy_11-([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_11.php?page=$1&sous_page=$2

RewriteRule ^final_fantasy_11-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_11.php?page=$1 [L]


RewriteRule ^final_fantasy_12-([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_12.php?page=$1&sous_page=$2

RewriteRule ^final_fantasy_12-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_12.php?page=$1 [L]


RewriteRule ^final_fantasy_13-([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_13.php?page=$1&sous_page=$2

RewriteRule ^final_fantasy_13-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_13.php?page=$1 [L]


RewriteRule ^final_fantasy_crystal_chronicles-([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_crystal_chronicles.php?page=$1&sous_page=$2

RewriteRule ^final_fantasy_crystal_chronicles-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_crystal_chronicles.php?page=$1 [L]


RewriteRule ^final_fantasy_crystal_chronicles_ring_of_fates-([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_crystal_chronicles_ring_of_fates.php?page=$1&sous_page=$2

RewriteRule ^final_fantasy_crystal_chronicles_ring_of_fates-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_crystal_chronicles_ring_of_fates.php?page=$1 [L]


RewriteRule ^final_fantasy_crystal_chronicles_echoes_of_time-([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_crystal_chronicles_echoes_of_time.php?page=$1&sous_page=$2

RewriteRule ^final_fantasy_crystal_chronicles_echoes_of_time-([0-9a-zA-Z_-]+)\.html$ /final_fantasy_crystal_chronicles_echoes_of_time.php?page=$1 [L]


Eh bien sachez, chers membres, que j'ai réussi à optimiser toutes ces instructions de façon à n'en faire que 3 ! O_o (et encore, en donnant bien plus de possibilités qu'avant !):

Code : Tout sélectionner
#Réécriture du site

RewriteRule ^([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /index.php?section=$1&page=$2&id=$3

#Plus propre pour certaines adresses
RewriteRule ^([0-9a-zA-Z_-]+)-([0-9a-zA-Z_-]+)\.html$ /index.php?section=$1&page=$2 [QSA]

RewriteRule ^([0-9a-zA-Z_-]+)\.html$ /index.php?section=$1 [L,QSA]


Bon, c'était évident et je crois que si je n'avais pas pensé à ça la première fois, c'est simplement parce que j'avais mis ce système en place au moment où j'ai ouvert en même temps toutes les sections de Final fantasy sur le site (donc fallait que je me dépêche vu que je voulais que tout soit fini pour Noël ^^). M'enfin voilà une bonne chose de faîte ! :oui:

Juste un dernier détail, les lettres majuscules que vous pouvez voir entre crochet à la fin de chaque instruction sont ce qu'on appelle des "flags", ils permettent d'activer des fonctions supplémentaires. Le flag [L] permet de spécifier que la ligne d'instruction doit être exécuté en dernier. L'autre flag que j'ai utilisé, le [QSA], est tout nouveau, je ne connaissais pas son existence avant (je n'ai pas l'habitude de lire la doc d'Apache ^^), et je doit dire que ça m'a posé bien du soucis. En fait, il permet d'utiliser des variables GET en plus de l'URL rewriting. Je m'explique. Pour les news par exemple, quand vous cliquez sur le nom d'une news sur la page d'accueil, la page sur laquelle vous êtes dirigée est celle-ci: news-(nombre).html ("nombre" étant l'id de la news). Jusqu'ici, tout va pour le mieux. Seulement, comme vous le savez déjà, les commentaires sont aussi affichés directement sur le site, et si leur nombre est supérieur à 15, il y a plusieurs pages. Comment savoir à quelle page on se trouve ? Il suffirait de faire ceci: news-(nombre)-(numéro de la page).html, mais ça serait assez lourd et pas du tout nécessaire aux moteurs de recherche ! Grâce au flag QSA, on peut écrire un truc de ce genre: news-(nombre).html?num_page=2, ce qui a d'ailleurs été mis en place dans la nouvelle organisation ! Mais en réalité, dans ce cas là, ça n'était pas vraiment un problème. Là où ça en posait un, c'était pour le système d'archive des news. En effet, ce système contient un formulaire d'envoi de type GET pour le classement des news. C'est à dire que le choix de classement qu'à fait l'utilisateur va être transmis via l'URL. Or, lorsqu'un formulaire de type GET envoi des informations, il rajoute ces informations à la fin de l'adresse: archives.html?classement=auteur => Avant de découvrir les flag QSA, j'ai bien galéré sur ce problème ! Voilà pour la petite histoire !
L'important n'est pas de connaître mais de savoir trouver !
La gentillesse ou la franchise ? Que choisir ?
Vive les otakus !!
Retourner sur le site
Avatar de l’utilisateur
Martial
Administrateur
Administrateur
 
Message(s) : 2520
Inscription : 10 Nov 2006, 23:41
Localisation : Rambouillet
Meilleurs scores: 12

Retour vers News

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 10 invité(s)

cron