Moodle 5.2 : le routeur n’est pas correctement configuré
10 août 2026 · 7 min de lecture
Ce que l’erreur signifie le plus souvent
Quand Moodle 5.2 indique que le routeur n’est pas correctement configuré, le serveur web ne transmet généralement pas les routes inconnues vers le contrôleur r.php. Le cas typique est une URL routée qui se termine par .php et renvoie 404 Not Found, alors que Moodle attend une réponse de routeur.
Dans la discussion Moodle.org « Moodle 5.2: router is not correctly configured », le symptôme central était /lib/exampleshimroute2.php qui renvoyait 404 au lieu du 302 attendu. Le site sait exécuter PHP, mais un faux chemin PHP est intercepté avant que Moodle puisse le router.
Pourquoi Moodle 5.x insiste sur le routage
Le routeur Moodle est un contrôleur frontal. La documentation Configuring the Router indique que r.php reçoit les requêtes qui ne correspondent pas à un fichier réel.
C’est devenu plus visible depuis Moodle 5.1, parce que les requêtes publiques doivent entrer par moodle/public, tandis que le code interne et la configuration restent hors de la racine web.
Commencez par la racine du document
Si votre code Moodle est ici :
/var/www/moodlele site public doit pointer ici :
/var/www/moodle/publicet non ici :
/var/www/moodleSi la racine est mauvaise, les règles de routeur ne feront que masquer un problème plus profond.
Correction Apache
La configuration de base côté Apache utilise FallbackResource :
<Directory "/var/www/moodle/public">
FallbackResource /r.php
</Directory>Parfois, l’hôte l’autorise dans le .htaccess de public :
FallbackResource /r.phpLe piège courant avec Apache + PHP-FPM est plus subtil. Si Apache envoie toute URL qui ressemble à .php vers PHP-FPM, même quand le fichier n’existe pas, PHP-FPM peut répondre 404 avant que FallbackResource ne s’applique.
La correction consiste à n’envoyer à PHP-FPM que les vrais fichiers :
<FilesMatch ".+\.ph(?:ar|p|tml)$">
<If "-f %{REQUEST_FILENAME}">
SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost"
</If>
</FilesMatch>Adaptez le chemin du socket à votre serveur.
Correction Nginx
Pour Nginx, utilisez try_files :
location / {
try_files $uri $uri/ /r.php$is_args$args;
}Si Moodle vit dans un sous-dossier :
location /moodle/ {
try_files $uri $uri/ /moodle/r.php$is_args$args;
}Cette configuration doit être dans le bloc serveur. Nginx n’a pas d’équivalent .htaccess.
OpenLiteSpeed, cPanel et hébergement mutualisé
Sur des environnements de type cPanel ou OpenLiteSpeed, utilisez souvent une règle de réécriture plutôt que FallbackResource :
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME}/index.php -f
RewriteRule ^(.*)$ $1/index.php [L]
RewriteRule ^$ ./index.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ r.php [L,QSA]Placez cette règle dans le dossier public, pas dans l’ancien dossier parent.
Ordre de diagnostic
- Ouvrez
Administration du site > Rapports > État du système. - Notez le test exact qui échoue.
- Appelez l’URL en direct avec le navigateur ou
curl -I. - Identifiez qui renvoie la réponse : Apache, Nginx, PHP-FPM, Moodle, CDN ou pare-feu.
- Lisez les logs web et PHP-FPM au même horodatage.
- Corrigez la première couche qui renvoie la mauvaise réponse.
- Rechargez le serveur web et PHP-FPM.
- Purgez les caches Moodle et relancez le contrôle.
La question utile est simple : qui a renvoyé le 404 ?
Ce qu’il ne faut pas faire
Ne rendez pas tout le dossier Moodle public pour faire disparaître l’erreur. Cela annule la raison de sécurité du dossier public.
N’ajoutez pas des règles de réécriture à la fois dans le parent et dans public. Choisissez la vraie racine web.
Ne mettez pas $CFG->routerconfigured = true pour masquer un serveur mal configuré. Ce drapeau peut calmer un contrôle, mais il ne route aucune requête à la place d’Apache, Nginx ou IIS.
Si le routeur passe mais que les pages restent cassées
Continuez avec les caches, le thème Boost, les plugins tiers, la console navigateur et $CFG->wwwroot. Le routeur n’est parfois qu’une couche du problème.
Pour la séquence complète, lisez mettre Moodle 5.1 à niveau vers 5.2.
FAQ
Le routage est-il obligatoire dans Moodle 5.2 ?
La documentation Moodle indique que la configuration du routeur est obligatoire depuis Moodle 5.1.
Où se trouve le routeur Moodle ?
Le point d’entrée est r.php.
Pourquoi Moodle attend 302 mais reçoit 404 ?
Souvent parce que le serveur envoie un faux chemin .php à PHP-FPM avant que le fallback vers r.php ne puisse s’exécuter.

Écrit par Choaib Mouhrach
Fondateur et ingénieur logiciel senior
Je conçois et développe des plateformes d’apprentissage sur mesure pour les organisations dont les parcours de formation et de certification sont complexes. Plutôt que d’assembler des plugins et des outils tiers, je crée des systèmes adaptés au fonctionnement réel de chaque activité, afin de réduire la charge administrative et d’améliorer l’expérience des apprenants.
Votre produit d'apprentissage mérite sa propre plateforme.
Si vous voulez offrir une expérience d'apprentissage construite autour de votre produit, de vos apprenants et de vos objectifs, vous êtes au bon endroit. Nous construisons des plateformes qui vous donnent le contrôle et la flexibilité pour grandir sans limites.