Final Fantasy RPG Maker

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

May 22, 2009 - 1:57am



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 !


Vue: 7781 fois !




Les 5 dernières news sur le sujet


Icône de la news Icône de la news Icône de la news Icône de la news Icône de la news

News précédente | News suivante

Page générée en 0.0001 secondes
©2011 Site créé par Martial, le Webmaster
Me contacter - Livre d'or - Forum - Plan du site
Mentions légales - Remerciements
Final-RPG