Site icon La programmation sur le web

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ée à comprendre, 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 :

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

Comment mettre en place l’url rewriting

En fonction de l’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 sur 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 (une alternative 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 de 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 :

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 :

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.

Quitter la version mobile