La plupart des frameworks PHP modernes embarquent un routeur de plusieurs centaines de lignes capable de gérer des middleware, des groupes de routes nommées et de l'injection de dépendances. QuietCMS prend le chemin inverse : un routeur minimaliste d'une quarantaine de lignes, sans dépendance externe, qui résout une URL en template PHP en moins de 5 ms.
Redirection Apache : le point d'entrée unique
Tout commence dans le fichier .htaccess à la racine du site. Les règles mod_rewrite interceptent chaque requête non statique et la redirigent vers index.php en passant l'URI originale dans le paramètre route :
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]
Les fichiers statiques (images, CSS, JS, fonts) sont exclus grâce aux conditions !-f et !-d : si le fichier existe physiquement sur le disque, Apache le sert directement sans toucher à PHP.
Équivalent Nginx
Sous Nginx, la configuration équivalente dans le bloc server est :
location / {
try_files $uri $uri/ /index.php?route=$uri&$args;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
try_files tente d'abord de servir le fichier ou le répertoire demandé, et ne passe la main à PHP que si rien ne correspond — le même comportement qu'Apache.
Résolution des patterns d'URL
Dans index.php, la valeur de $_GET['route'] est parsée et comparée à une liste de patterns prédéfinis :
/→ templatehome.php/blog/ou/blog→ templateblog.php(liste des articles)/categorie/<slug>/→ templatecategory.php/<slug>/→ tentative post, puis page si non trouvé →post.phpoupage.php- Aucune correspondance → template
404.php
La résolution se fait avec des comparaisons de chaînes et des expressions régulières PHP simples. Aucun système de routes nommées ou de middleware : l'URL est résolue linéairement, du cas le plus spécifique au plus général.
Zone admin isolée
L'administration utilise son propre système de routage, entièrement séparé. L'URL admin est un slug aléatoire généré à l'installation, routé par .htaccess vers le dossier admin/. À l'intérieur, admin/index.php gère ses propres routes via un paramètre ?page=. Le chemin /admin/ direct est bloqué par une règle Deny from all dans le .htaccess du dossier admin.
Avantages de cette approche
- Aucun overhead framework : pas d'autoloader complexe, pas de conteneur IoC, pas de résolution de service au démarrage.
- Debugging simple : un
var_dump($route)dansindex.phpsuffit pour comprendre ce qui se passe. - Personnalisable : ajouter un nouveau type de route (ex.
/auteurs/<slug>/) prend dix lignes de PHP. - Performance : les décisions de routage sont résolues en moins de 5 ms même sur un hébergement mutualisé d'entrée de gamme.
Cette philosophie — faire exactement ce dont on a besoin, pas plus — est au cœur de QuietCMS. Le routeur n'a pas vocation à remplacer Symfony Router ou FastRoute ; il couvre les besoins d'un site de contenu classique avec un code que n'importe quel développeur PHP junior peut lire et maintenir.
Articles similaires
La bibliothèque de classes core/ de QuietCMS
Tour d'horizon des 20 classes PHP de la bibliothèque core/ de QuietCMS et leurs responsabilités.
Stockage JSON : l'architecture flat-file de QuietCMS
Comment QuietCMS stocke tout le contenu en JSON sans base de données, avec les avantages et les limites du flat-file.
Éditeur CSS et templates PHP en ligne
QuietCMS permet d'éditer le CSS et les templates PHP du thème actif directement depuis le back-office.