old-indian-chief.jpg Hier j’ai dû mettre le site en maintenance quelques minutes pour mettre à jour Blogotext (et migrer sous MySQL en même temps — j’y reviendrais prochainement).
Pour qu’un visiteur qui arrive à ce moment là ne rencontre pas tout un tas d’erreurs quand j’envoie mes fichiers par FTP ou que je lance mes scripts, j’utilise ce petit bout de code Apache :

RewriteCond %{REQUEST_URI} !/maintenance.html$
RewriteCond %{REMOTE_ADDR} !255.34.56.78
RewriteRule .* http://lehollandaisvolant.net/maintenance.html [L]

À placer dans le fichier .htaccess de la racine du site, après avoir remplacé l’adresse IP de la seconde ligne par la vôtre.

Ce que cela fait ligne par ligne :
Ligne 1 : pour tout accès à un fichier autre que maintenance.html ;
Ligne 2 : et pour toutes les IP sauf 255.34.56.78 (la vôtre donc) ;
Ligne 3 : rediriger sur la page maintenance.html.

La ligne 1 permet simplement d’éviter une redirection en boucle, très important : le hit sur maintenance.html ne doit pas générer de redirection sur maintenance.html
Très bourrin comme méthode mais ça marche.

Cela vous permet à vous d’accéder à votre site normalement et aux autres de ne pas interférer et d’être au courant de ce qui se passe : la page maintenance.html contenant évidemment un message avec éventuellement un lien vers un autorblog du site.

image de Mharrsch

21 commentaires

gravatar
Le Hollandais Volant a dit :

@TD : :/
J’ai presque 700 articles. Et j’ai pas cherché correctement.

Me fait penser au compte Twitter humoristique d’un amnésique qui se souhaite la bienvenue 3 fois par jour xD. J’ai pas trouvé le lien non plus.

gravatar
mart-e a dit :

Il peut être également intéressant d'ajouter un code HTTP 503 Service Unavailable pour signaler aux robots que ce n'est que temporaire et que ce contenu n'est pas l'habituel (pour les moteurs de recherches, etc.). A ajouter au début de ton fichier cible :

<?php
ob_start();
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
header('Retry-After: 3600');
header('X-Powered-By:');
?>


J'avais utilise cela au temps de SOPA

gravatar
jez a dit :

Bonjour,

Pour information, bien que l'utilisation de fichier .htaccess semble très pratique, il s'agit d'une hérésie en terme de performances et de maintenance. Bossant dans l'admin-sys (owie le reverse):
- Le fichier va être chargé N fois le nombre de client connectés, donc si vous avez 15K rewrites dans vos htaccess, ne vous étonnez pas d'une chute des perfs.
- Le fait d'activer les .htaccess via l'option AllowOverride active la recherche de ces dernier dans l’arborescence parente du fichier appelé. Donc c'est pas forcement tiptop.
- Et puis faire des find /var/www -name .htaccess, c'est bien quand on a pas trop de données. Une fois que vous les avez trouvés, il faut ensuite vérifier la manière dont il se surchargent.

L'idéal de mettre un maximum dans la conf d'apache, et de faire des reload (pas de coupure de connexion). Conf centralisée c'est propre, et y'a que les adminsys qui ont les droits root :D

Source: https://httpd.apache.org/docs/2.2/fr/howto/htaccess.html#when ou http://muffinresearch.co.uk/archives/2008/04/07/avoiding-the-use-of-htaccess-for-performance/

gravatar
Guenhwyvar a dit :

@qwerty :


Euh, tu n'avais pas déjà posté cet article ?


Meuh non, c'est pas le même, l'IP a changé :b


@mart-e : C'est pas plus simple de préciser l'erreur 503 directement dans le .htaccess ? Genre « [R=503,L] » ?


@jez : Pour les dédiés, c'est sûr. Pour les mutus, pas bien le choix…

gravatar
mart-e a dit :

@Guenhwyvar : je ne savais pas que tu pouvais le faire depuis cet endroit. En effet plus simple (te permet de garder un simple fichier html comme résultat)

gravatar
MoOoH a dit :

Super !
J'ai notre site à mettre à jour ce week end, plutot que de faire un truc sale, au moins on pourra faire une mise à jour propre ;)

Merci d'avoir partagé !

gravatar
Jez a dit :

Oui, c'est bien pour les petites modif d'appoints (et les mutu)

Mais bon, je trouve qu'il est encore trop souvent prescrit sur les blogs; en effet, le htaccess, c'est pas automatique ...  :p

gravatar
Venus McFlytrap a dit :

Pour AlzheimerGuy, le meilleur c'est quand même le tweet dans lequel il se demande à lui-même si il se connait :D

gravatar
Kevin a dit :

Mercu Timo, c'est très pratique !

Et si on souhaite autoriser non pas une adresse IP mais un nom d'hôte (dyndns), c'est la même synthaxe ?

gravatar
thican a dit :

Plop !

Je cherche aussi à utiliser la directive RewriteCond (du module mod_rewrite dans Apache 2.4 http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#rewritecond), mais avec une adresse IPv6.

Or, mon adresse IPv6 n'est pas basée sur mon adresse MAC, donc change à chaque fois que j'allume le PC (et puis je n'en ai pas qu'un seul).

Du coup, je n'arrive à faire fonctionner ce système qu'avec mon adresse IPv6 complète, comme
123:4567:89ab:cdef:1:2:3:4
alors que j'aurais bien souhaité faire avec
123:4567:89ab:cdef::/64

La doc d'apache ne m'a pas éclairé sur ce point, malheureusement.

As-tu une solution, stp ? :-)

Sinon, puisqu'on parle un peu de configuratuion d'Apache, saurais-tu aussi où et comment faire pour créer sa propre règle de log, et plus particulièrement avec le port du client distant, comme sur Nginx ?

log_format main
'$remote_addr:$remote_port $remote_user [$time_iso8601] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"';

gravatar
Le Hollandais Volant a dit :

@thican :
Y’a quels trucs là : http://burkeharper.com/knowledge/?tag=rewritecond
Et dans ta page, le vois le format de plages IP :
Allow from 2001:db8::a00:20ff:fea7:ccea
Allow from 2001:db8::a00:20ff:fea7:ccea/10



Donc si tu essayes quelque chose comme :

RewriteCond %{REMOTE_ADDR} !^123\:4567\:89ab\:cdef\:\:/64
RewriteRule .* – [F]


Les règles de log se font dans les obscures fichiers textes d’Apache : sous Ubuntu, c’est dans /etc/apache2/apache2.conf que le format de log est composé :

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent


(je ne sais pas à quoi correspondent chaque variable, mais la doc t’éclairera. Idem, chaque ligne doivent s’appliquer selon le cas et avec une priorité pour le premier.

gravatar
thican a dit :

Bon, dommage, pour les 2, aucuns succès :/

pour l'IPv6 dans le RewriteCond, ça me paraissait bizarre de prendre en compte les ':' avec '\', vu que mon adresse IPv6 complète fonctionne, mais pas la partie réseau uniquement (en /64).

Pour ce qui est du LogFormat, avec l'indication de l'option, j'ai donc trouvé le fichier de config, ainsi que la page de documentation sur le site officiel https://httpd.apache.org/docs/2.4/mod/mod_log_config.html
On voit donc que %a (Client IP address and port of the request.) ferait mon affaire, or, je n'ai encore une fois que l'adresse IP sans le port. Bizarre, étrange.

Les commentaires sont fermés pour cet article