Apache et les .htaccess #1 : Les réécritures d’URLs, première partie
Vous souhaitez mettre votre solution en avant en haut de cet article ? Contactez-nous
Après mon article sur le .htaccess, de nombreuses personnes m’ont demandé de m’étendre un peu plus sur la configuration apache, et notamennt les récritures d’URL.
Le concept d’URL Rewriting
L’URL rewriting est une pratique qui consiste à « déguiser » des URLs pour qu’elles soient plus intéressantes pour le SEO, mais aussi plus jolies et logiques. De cette manière, nous pourrons par exemple déguiser l’url /mes_articles.php?id=38, en l’url /mes_articles/mon titre/38, plus interessante pour Google et consorts.
Ce déguisement d’url se fait grâce à des patterns, qui sont des conditions. Toute URL qui valide une condition se voit transformer en entrant dans le serveur.
Pour créer ces patterns, il faut utiliser une technique nommée « Expressions régulières », qui est sans aucun doute une des choses les plus hermétiques aux néophytes, mais qui est heureusement assez simple une fois que la logique et la syntaxe sont acquises.
Les expressions régulières
Les expressions régulières sont un sujet très vaste, qui mériterait à lui tout seul un article plus long que celui-ci. Je serais donc obligé de passer bien plus vite sur le sujet que nécessaire. Je vous encourage, si vous ne connaissez pas le sujet, ce très bon cours du site du zéro.
Les expressions régulières sont un moyen de définir des « contrats » pour les chaînes de textes. Ces contrats sont ensuite utilisés par divers outils, pour savoir par exemple si une chaîne valide le contrat ou pas.
Voilà un exemple simple d’expression régulière: /Bonjour [a-z]+/.
Explication:
– les « / » sont un moyen simple d’indiquer qu’on est en présence d’une expression régulière.
– le « + » s’applique à ce qu’il suit, donc dans notre cas [a-z]. Il signifie que ce caractère peut être répété entre 1 et l’infini pour valider la condition.
– le [a-z], enfin, est une classe de caractères, qui signifie que tous les caractères entre a et z valide la condition.
La chaîne « Bonjour martin », par exemple, valide notre contrat, de la même manière que la chaine « Bonjour martin, comment vas-tu ?« , car notre expression est bien présente dans la chane.
A l’inverse, « Bonjour, martin », ne valide pas la chaîne, car la virgule n’est pas prévue dans le contrat.
Pour finir, il est possible de « capturer » des portions de chaîne pour les utiliser plus tard, grâce aux parenthèses, comme le montre cet exemple.
Pour vous aider à tester vos expressions régulières, je vous conseille d’utiliser Rubular, qui contient un petit aide-mémoire des syntaxes les plus fréquentes en plus de son outil de test.
Un peu de munitions pour vos expressions régulières
Le vocabulaire des expressions régulières est assez étendu, je ne vais pas vous en faire une liste exhaustive ici. Voilà tout de même la liste des symboles utilisés pour la suite
^ début de ligne
$ fin de ligne
[] classe de caractères
() parenthèses capturantes
+ au moins un
$1, $2, … On réécris une portion capturée précédemment
Il y en a bien évidemment plus, mais voilà ceux que vous utiliserez le plus pour les expressions régulières.
Le vif du sujet, L’URL Rewriting
Pour la suite, nous allons avoir besoin d’un serveur apache avec mod_rewrite d’installé. Si vous avez un mutualisé, c’est normalement le cas. Si vous travaillez avec Wamp, pensez à activer mod_rewrite.
Placez vous dans le dossier racine de votre site, et ouvrez (ou créez) le fichier .htaccess.
La première chose à faire est d’activer mod rewrite. pour cela, écrivez RewriteEngine On. Toutes vos réécritures devront se placer en DESSOUS de cette ligne.
La syntaxe permettant de créer une réécriture est très simple : RewriteRule pattern nouvelle_url [options].
Voilà quelques exemples :
RewriteRule ^ma_page$ mon_fichier.php [L]
Cet exemple relie une uri de notre choix (ma_page) à un fichier.
Le flag [L] signifie que l’on stop ici la lecture des règes de redirections.
RewriteRule ^blog/(.*)$ articles/$1 [R=301]
Pour cet exemple, il faut imaginer une nouvelle version de site, ou la partie blog change d’URLs à cause d’un nouveau CMS. Nous effectuons donc une redirection de nos anciennes adresses (/blog/mon-titre) vers les nouvelles (/articles/mon-titre).
Il faut noter le $1, qui réinsert le titre de l’article, et le Flag [R=301], qui indique a google que c’est une redirection de type 301, donc permanente.
RewriteRule ^/articles/([a-z0-9]+)/([0-9]+)$ articles.php?title=$1&id=$2 [L]
Pour ce dernier exemple, le but est de donner un permalien à des articles, qui ne sont pas réellement des fichiers, mais des données mySQL (par exemple). Nous découpons donc nos belles URL pro-SEO en un format compréhensible par php, avec des variables $_GET .
Et la suite ?
Ces quelques cas sont très bien, mais restent la base. Il est possible de faire des choses bien plus puissantes avec les réécritures, que je n’ai malheureusement pas la place d’écrire dans cet article.
Envie d’apprendre à faire des redirections conditionnelles, en fonction de la personne qui fait la requête ? Ou de faire des redirections en fonction de la présence ou non d’un dossier ? Ce sera dans l’article de mardi prochain, sur les RewriteCond !