.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éthodeLe contenu

Nous ajoutons le fichier .htaccess dans notre dossier public.

1
# Empêche l'affichage du contenu des répertoires
2
# (évite que l'on puisse lister les fichiers d'un dossier via le navigateur)
3
Options -Indexes
4
5
# Définit l'encodage par défaut en UTF-8
6
# Utile pour éviter les problèmes d'accents dans les pages HTML
7
AddDefaultCharset UTF-8
8
9
# Active le moteur de réécriture des URLs
10
RewriteEngine On
11
12
# Bloque l'accès direct aux fichiers sensibles
13
# (.env, fichiers de configuration, logs, exports SQL, etc.)
14
<FilesMatch "\.(env|ini|log|sql|json|lock|yml)$">
15
    Deny from all
16
</FilesMatch>
17
18
# -----------------------------
19
# FRONT CONTROLLER
20
# -----------------------------
21
22
# Si la ressource demandée n'est PAS un fichier existant
23
RewriteCond %{REQUEST_FILENAME} !-f
24
25
# Et si la ressource demandée n'est PAS un dossier existant
26
RewriteCond %{REQUEST_FILENAME} !-d
27
28
# Alors toutes les requêtes sont redirigées vers index.php
29
# L'URL demandée est transmise dans le paramètre "url"
30
# Exemple :
31
#   /utilisateur/show?id=3  → index.php
32
RewriteRule ^(.*)$ index.php [QSA,L]
33

Désactivation de l’affichage du contenu des dossiers

1
Options -Indexes

Cette 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

1
AddDefaultCharset UTF-8

Cette 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

1
RewriteEngine On

Cette 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

1
<FilesMatch "\.(env|ini|log|sql|json|lock|yml)$">
2
    Deny from all
3
</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

1
RewriteCond %{REQUEST_FILENAME} !-f

Cette 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

1
RewriteCond %{REQUEST_FILENAME} !-d

Cette 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

1
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