.htaccess
Pour mettre en place la réécriture d’URL en PHP sur les serveurs Apache, il est nécessaire d’ajouter un fichier spécifique dans le dossier public du site.
Ce fichier ne possède pas de nom, uniquement une extension : .htaccess.
Méthode : Le contenu
Nous ajoutons le fichier .htaccess dans notre dossier public.
# Empêche l'affichage du contenu des répertoires# (évite que l'on puisse lister les fichiers d'un dossier via le navigateur)Options -Indexes# Définit l'encodage par défaut en UTF-8# Utile pour éviter les problèmes d'accents dans les pages HTMLAddDefaultCharset UTF-8# Active le moteur de réécriture des URLsRewriteEngine On# Bloque l'accès direct aux fichiers sensibles# (.env, fichiers de configuration, logs, exports SQL, etc.)<FilesMatch "\.(env|ini|log|sql|json|lock|yml)$"> Deny from all</FilesMatch># -----------------------------# FRONT CONTROLLER# -----------------------------# Si la ressource demandée n'est PAS un fichier existantRewriteCond %{REQUEST_FILENAME} !-f# Et si la ressource demandée n'est PAS un dossier existantRewriteCond %{REQUEST_FILENAME} !-d# Alors toutes les requêtes sont redirigées vers index.php# L'URL demandée est transmise dans le paramètre "url"# Exemple :# /utilisateur/show?id=3 → index.phpRewriteRule ^(.*)$ index.php [QSA,L]Désactivation de l’affichage du contenu des dossiers
Options -IndexesCette directive empêche l’affichage automatique du contenu d’un répertoire lorsqu’aucun fichier index n’est présent.
Sans cette règle, un utilisateur pourrait voir la liste des fichiers d’un dossier directement dans son navigateur, ce qui pose un problème de sécurité.
Définition de l’encodage par défaut
AddDefaultCharset UTF-8Cette ligne définit l’encodage UTF-8 comme encodage par défaut pour les fichiers envoyés par le serveur.
Cela évite les problèmes d’affichage des caractères accentués (é, à, ç, etc.) dans les pages HTML et assure une compatibilité correcte avec les bases de données et les navigateurs modernes.
Activation du moteur de réécriture d’URL
RewriteEngine OnCette directive active le module mod_rewrite d’Apache, qui permet de transformer les URLs.
C’est indispensable pour :
créer des URLs propres (sans
.php)mettre en place une architecture MVC
utiliser un front controller
Protection des fichiers sensibles
<FilesMatch "\.(env|ini|log|sql|json|lock|yml)$"> Deny from all</FilesMatch>Ce bloc interdit l’accès direct aux fichiers dont l’extension est listée (.env, .ini, .log, .sql, etc.).
Ces fichiers peuvent contenir :
des mots de passe
des clés d’API
des informations de configuration
des exports de base de données
Cette règle empêche qu’ils soient consultables depuis un navigateur.
Principe du Front Controller
L’objectif des règles suivantes est de faire passer toutes les requêtes par un seul fichier : index.php.
a) Vérification que la ressource n’est pas un fichier existant
RewriteCond %{REQUEST_FILENAME} !-fCette condition vérifie que l’URL demandée ne correspond pas à un fichier réel sur le serveur.
Exemple :
/css/style.css → le fichier existe → Apache le sert directement.
b) Vérification que la ressource n’est pas un dossier existant
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-dCette condition vérifie que l’URL demandée ne correspond pas à un dossier réel.
Exemple :
/images/ → le dossier existe → Apache le gère normalement.
c) Redirection vers le front controller
RewriteRule ^(.*)$ index.php [QSA,L]Si les deux conditions précédentes sont vraies, alors :
toute requête est redirigée vers
index.php
Exemple :
/utilisateur/show?id=3
devient :
index.php
QSA (Query String Append) : conserve les paramètres existants (
id=3)L (Last) : indique que c’est la dernière règle à appliquer