PHP, l’url rewriting

L’url rewriting peut paraître barbare dans un premier temps mais c’est une technique qui est indispensable afin de gagner en visibilité. Une visibilité pas seulement pour les moteurs de recherche qui indexent ton site mais également pour le lecteur. Si l’url rewriting (ou la ré-écriture d’url) est correctement mise en place, les adresses de chaque page gagneront en clarté.

Définition de l’url rewriting

Comme je viens de le dire, l’url rewriting est une technique qui permettra de remplacer une URL compliqué, par exemple :

https://mon-site.com/index.php?type=p&id=2

En :

https://mon-site.com/exemple-url-rewriting

Pourquoi mettre en place l’url rewriting

Maintenant que tu as vu quel changement la ré-écriture d’url apporte à ton site, pourquoi devrais-tu le mettre en place. Il y a plusieurs raisons :

  • gagner en lisibilité pour ton visiteur qui verra en un regard l’article qu’il est en train de lire
  • améliorer le référencement. Les moteurs de recherche indexent les pages que tu publies, aucun de ses moteurs apprécient les url complexes.
  • en tant que administrateur / développeur de ton site, tu pourras garder une hiérarchie dans tes pages et celle-ci sera bien plus stable. La stabilité est très apprécié par les moteurs de recherche
  • avoir une vue voire un contrôle sur les mots clés même si l’importance de l’url rewriting n’est pas aussi grande que l’on souhaiterai, elle joue un rôle important.

Voici des raisons suffisantes pour mettre en place cette technique sur ton site. Tu peux avoir plus d’information sur ce lien.

Comment mettre en place l’url rewriting

En fonction de votre hébergement choisi (voir l’article sur l’hébergement), tu auras plus ou moins le choix. Si tu es sur un serveur dédié, tu peux la mettre en place dans la configuration de ton site directement dans le serveur web. Si tu es un peu plus limité et que tu utilises Apache, tu peux placer, à la racine de ton site un fichier .htaccess (lien).

Si tu utilise Nginx (un concurrent d’Apache), je t’invite à suivre ce lien.

Tu peux également passer par le PHP (et oui c’est étonnant, c’est le sujet de l’article). D’ailleurs, tu vas pouvoir découvrir comment le mettre en place sur un serveur tournant sur Apache.

Des CMS comme WordPress proposent directement la mise en place de la ré-écriture d’url :

L’url rewriting en PHP sur Apache

Je ne connais pas suffisamment Nginx pour en décrire le fonctionnement et j’en suis désolé mais si tu as des questions, n’hésites pas à demander, j’en profiterai pour faire quelques recherches.

Tout d’abord, nous allons mettre dans le fichier htaccess (à la base de ton site), la redirection de toutes les requêtes vers la page index.

Cela va permettre de pouvoir gérer toutes les url de ton site.

Configuration de .htacces

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !^/controleur/*
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

Petites explications

RewriteEngine on

Ceci active le module de ré-écriture.

RewriteBase /

Cette ligne permet d’indiquer la racine du site, en général, la racine du site n’est pas la racine du serveur.

RewriteCond %{REQUEST_URI} !^/controleur/*

J’ai placé cette ligne pour information, elle permet d’exclure un sous-dossier des règles d’écriture.

RewriteCond %{REQUEST_FILENAME} !-f

Il s’agit d’une condition préalable primordiale pour la bonne éxecution de la ré-écriture, elle indique qu’il ne s’agit pas d’un fichier réel.

RewriteRule ^(.*)$ index.php [QSA,L]

Il s’agit la règle qui renvoie les adresses correspondant aux conditions vers la page index. QSA indique que les paramètres sont passés comme arguments.

Les informations ont été, en partie, trouvées sur cette page.

Mise en place avec PHP

Ici, je ne parlerai que de la partie de la gestion des adresses, je n’aborderai pas la création d’un site complet.

Je vais procéder par étape, à la fin, tu auras le contenu du fichier complet.

Dans un premier temps, tu vas devoir réfléchir sur la construction de tes url.

Une fois que tu as défini la syntaxe, tu devras l’inclure dans les regles :

$regles = array( 
    'image'   => "/image/(?'text'[^/]+)/(?'id'\d+)",    // '/image/un-texte/51'
    'album'     => "/album/(?'album'[\w\-]+)",              // '/album/album-slug'
    'categorie'  => "/categorie/(?'categorie'[\w\-]+)",        // '/categorie/categorie-slug'
    'page'      => "/page/(?'page'about|contact)",          // '/page/about', '/page/contact'
    'post'      => "/(?'post'[\w\-]+)",                     // '/post-slug'
    'accueil'      => "/"                                      // '/'
);

Maintenant, tu vas devoir récupérer l’URI qui est demandé (il s’agit de l’identifiant de ta page), par exemple /image/51.

$uri = rtrim( dirname($_SERVER["SCRIPT_NAME"]), '/' );
$uri = '/' . trim( str_replace( $uri, '', $_SERVER['REQUEST_URI'] ), '/' );
$uri = urldecode( $uri );

A présent, il te reste à déterminer à quelle règle correspond ton uri :

foreach ( $regles as $action => $regle) {
    if ( preg_match( '~^'.$regle.'$~i', $uri, $params ) ) {
        // Maintenant, tu sais quelle action et les paramètres qui correspondent
    }
}

Avec ceci, tu devrais obtenir ton fichier index.php, on va rajouter simplement 2 lignes qui permettront :

  • d’arrêter le programme, une fois que la page recherchée est trouvée
  • d’afficher une page dans le cas où la page demandée n’est pas connue

Le fichier final :

$regles= array( 
    'image'   => "/image/(?'text'[^/]+)/(?'id'\d+)",    // '/image/un-texte/51'
    'album'     => "/album/(?'album'[\w\-]+)",              // '/album/album-slug'
    'categorie'  => "/categorie/(?'categorie'[\w\-]+)",        // '/categorie/categorie-slug'
    'page'      => "/page/(?'page'about|contact)",          // '/page/about', '/page/contact'
    'post'      => "/(?'post'[\w\-]+)",                     // '/post-slug'
    'accueil'      => "/"                                      // '/'
);

$uri = rtrim( dirname($_SERVER["SCRIPT_NAME"]), '/' );
$uri = '/' . trim( str_replace( $uri, '', $_SERVER['REQUEST_URI'] ), '/' );
$uri = urldecode( $uri );

foreach ( $regles as $action => $regle) {
    if ( preg_match( '~^'.$regle.'$~i', $uri, $params ) ) {

        include( $action . '.php' );
        exit();
    }
}

// Si rien n'est trouvé, on affiche une page 404.php
include(  '404.php' );

Dans notre exemple, dans ton dossier et au même niveau, il y a les fichiers suivants :

  • index.php
  • 404.php
  • image.php
  • album.php
  • categorie.php
  • page.php
  • post.php
  • accueil.php

Conclusion

Voilà, tu es en mesure de mettre en place l’url rewriting sur ton site et cela de manière simple.

Cette page a été faite après avoir longtemps eu des problèmes, ja source a été trouvé sur le forum stackoverflow.com.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.