Architecture

Le routeur PHP sans framework

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 :

  • / → template home.php
  • /blog/ ou /blog → template blog.php (liste des articles)
  • /categorie/<slug>/ → template category.php
  • /<slug>/ → tentative post, puis page si non trouvé → post.php ou page.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) dans index.php suffit 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