Réécriture d'urls avec htaccess sous CodeIgniter
Le principe de réécriture d’urls permet de “transformer” les urls pour référencer plus simplement des pages clés d’un site internet. Pour cela on utilise le fichier htaccess, un fichier caché situé à la racine du dossier de l’application.
Nous allons voir comment est géré par défaut les urls dans le framework CodeIgniter et comment les modifier pour éviter de perdre le référencement déjà acquis sur un site web.
Rappel:
Un fichier htaccess est un fichier de configuration d’un serveur web Apache. Son contenu s’applique à son répertoire ainsi qu’aux sous-répertoires de celui-ci. Il a pour rôle d’écrire des messages d’erreurs, de modifier les droits d’accès à des fichiers ou des dossiers, et de créer des redirections.
La réécriture d’url est la modification d’une url demandé vers une url voulu (exemple: www.mon-site.com/ma-page.html -> www.mon-site.com/ma-page-voulu.php ). Cette configuration permet au serveur d’interpreter de la même façon ces deux requêtes.
Pré requis:
Il vous faut une application web avec le framework CodeIgniter installé avec un controleur déjà créé.
Mon utilisation:
Mon travail est de migrer un site internet sous le framework CodeIgniter. Seulement, les moteurs de recherches gardent comme référence les urls de l’ancienne version du site internet (exemple: www.mon-site.com/ma-page.html).
Mon controleur ressemble pour l’instant à ça:
Si je veux afficher “Hello World”, il faut y accéder avec l’url suivante : www.mon-site.com/index.php/monControleur/maMethode
Malheureusement, je veux garder ma page de départ : www.mon-site.com/ma-page.html
Pour cela, on va modifier en premier le fichier “config.php” dans “application/config”:
Ces modification permettent de changer les types de requêtes des urls de CodeIgniter.
On passe donc d’une url : “www.mon-site.com/index.php/monControleur/maMethode” à une url :
“www.mon-site.com/index.php?c=monControleur&m=maMethode”
Les variables envoyées représentent les éléments suivants:
- d = dossier du controleur
- c = nom du controleur
- m = méthode du controleur
Sur mon exemple précédent, le controleur se trouve dans le dossier par défaut, donc nous n’avons pas besoin de la variable “d”.
L’avantage de cette modification va nous permettre aussi de faire la réécriture d’urls dynamiques.
On va aussi créer un fichier “.htaccess” à la racine du dossier:
Si vos fichiers ne sont pas à la racine du serveur web, adapter la ligne “RewriteBase” avec le nom du dossier racine (exemple: “RewriteBase /CodeIgniterDemo/” ).
On teste notre url: “www.mon-site.com/ma-page.html”, on a bien un résultat “Hello World”, donc Apache interprète bien la requête de la même façon que “www.mon-site.com/index.php?c=monControleur&m=maMethode”.
Réécriture d’urls dynamiques:
On cherche généralement à réécrire les urls dynamiques pour faciliter le réferencement de nos produits et éviter des urls trop techniques. En effet, on préfère avoir “www.mon-site.com/produit/ordinateur-portable-12.html” au lieu de “www.mon-site.com/produit.php?id_produit=12”.
Pour l’exemple, on va créé un controleur “produit.php”:
On ajoute la ligne dans le fichier htaccess: