Trois méthodes permettent de passer WordPress en maintenance sans installer d’extension : déposer un fichier .maintenance à la racine, écrire une mu-extension d’une quinzaine de lignes, ou détourner les requêtes au niveau du serveur. La première prend dix secondes mais s’arrête d’elle-même ; la deuxième est le meilleur compromis ; la troisième est la seule qui tienne si PHP lui-même est en panne.
Méthode 1 — Le fichier .maintenance
WordPress possède son propre verrou, celui qu’il pose pendant ses mises à jour. Créez à la racine du site, à côté de wp-config.php, un fichier nommé .maintenance contenant une seule ligne :
<?php $upgrading = time(); ?>Le site répond aussitôt en 503, avec un en-tête Retry-After: 600. Supprimez le fichier pour rouvrir.
WordPress ignore ce fichier au bout de dix minutes : il compare l’horodatage à l’heure courante et considère la maintenance terminée au-delà. Passé ce délai, votre site rouvre tout seul, au milieu de votre intervention. Cette méthode ne convient qu’aux opérations très courtes.
Deuxième limite : la page affichée est le message anglais du cœur, sans votre marque, et vous ne pouvez pas y accéder non plus — administrateur compris. Le guide de dépannage de ce message détaille son fonctionnement exact.
Méthode 2 — Une mu-extension de quinze lignes
C’est le bon compromis : le contrôle d’une extension, sans en installer une. Créez le dossier wp-content/mu-plugins/ s’il n’existe pas, puis un fichier maintenance.php à l’intérieur. Les mu-extensions se chargent automatiquement et n’apparaissent pas dans la liste des extensions désactivables.
<?php
/**
* Plugin Name: Maintenance minimale
*/
add_action( 'template_redirect', function () {
// Les administrateurs continuent de voir le vrai site.
if ( current_user_can( 'manage_options' ) ) {
return;
}
// robots.txt ne doit jamais recevoir un 5xx.
$chemin = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
if ( is_robots() || '/robots.txt' === $chemin || '/favicon.ico' === $chemin ) {
return;
}
nocache_headers();
header( 'Retry-After: 3600' );
header( 'X-Robots-Tag: noindex, nofollow', true );
wp_die(
'Le site est en maintenance. Merci de revenir dans quelques instants.',
'Maintenance',
503
);
}, 0 );Trois détails font toute la différence avec les extraits qu’on trouve partout. La priorité 0 place le contrôle avant tout le reste. L’exclusion de robots.txt vérifie aussi le chemin de la requête, parce que is_robots() reste faux sur un site en permaliens simples. Et nocache_headers() empêche qu’un cache conserve la réponse d’erreur après la réouverture.
Pour rouvrir : supprimez le fichier. Rien d’autre à défaire, aucune option laissée en base.
Méthode 3 — Au niveau du serveur
Seule méthode qui fonctionne encore si PHP ou la base de données sont hors service — donc la seule valable pour une panne, par opposition à une intervention planifiée. Sur Apache, dans le .htaccess à la racine :
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^203\.0\.113\.10$
RewriteCond %{REQUEST_URI} !^/maintenance\.html$
RewriteCond %{REQUEST_URI} !^/robots\.txt$
RewriteRule ^(.*)$ /maintenance.html [R=503,L]
ErrorDocument 503 /maintenance.html
Header always set Retry-After "3600"Remplacez 203.0.113.10 par votre adresse IP publique : c’est elle qui vous laisse voir le site normal pendant que les autres voient la page temporaire. Sur nginx, l’équivalent tient en trois lignes dans le bloc server :
set $maintenance 1;
if ($remote_addr = 203.0.113.10) { set $maintenance 0; }
if ($request_uri = /robots.txt) { set $maintenance 0; }
if ($maintenance = 1) { return 503; }
error_page 503 /maintenance.html;Inconvénient : votre adresse IP change souvent, et une règle oubliée dans un fichier de configuration se retrouve six mois plus tard.
Laquelle choisir
| Méthode | Pour | Limite principale |
|---|---|---|
.maintenance | Une opération de moins de dix minutes | S’annule tout seul, et vous enferme dehors aussi |
| mu-extension | Une intervention planifiée, accès admin conservé | Ne survit pas à une panne de PHP |
| Règle serveur | Une panne, une migration, un site hors service | Dépend de votre IP, et s’oublie |
Le contrôle qui vaut pour les trois
curl -I https://votre-site.fr/
curl -I https://votre-site.fr/robots.txtLa première doit renvoyer 503 avec un Retry-After. La seconde ne doit pas renvoyer 5xx. Ce second point est celui que les trois méthodes ratent le plus facilement, et c’est aussi celui qui coûte le plus cher : un 5xx prolongé sur ce fichier fait cesser l’exploration du site entier.
Quand une extension redevient plus simple
Les trois méthodes ci-dessus supposent que vous soyez à l’aise avec un accès FTP ou SSH, et que vous pensiez à tout : l’accès administrateur, les chemins à exclure, les en-têtes anti-cache, la réouverture. Un banc d’essai des extensions du marché montre que ces oublis ne sont pas théoriques : deux extensions sur cinq laissent passer le défaut de robots.txt.
Mes503 Maintenance Page fait exactement ce que fait la mu-extension ci-dessus, avec une page présentable, un aperçu réservé aux administrateurs et un interrupteur. Si vous préférez le code, la mu-extension est un choix parfaitement défendable — c’est d’ailleurs de là qu’est parti ce plugin.