2009-02-24 5 views
3

Je suis sur le point de faire une maintenance de serveur et j'aimerais réécrire les requêtes au message 503 standard temporairement indisponible d'Apache. J'ai cherché sur Google et trouvé quelques extraits de mod_rewrite, mais ils impliquent tous de faire un [R = 503] à un script PHP qui envoie alors ses propres 503 en-têtes et un message écrit à la main ... qui semble juste moche pour moi, quand le défaut d'Apache est là pour moi. Donc, comment puis-je réécrire toutes les requêtes au message d'erreur standard 503 d'Apache?Comment puis-je réécrire tout sauf mon adresse IP à la std. Apache 503 temporairement en baisse message d'erreur?

Merci pour votre aide

(Long temps de codage abonné RSS Horreur ici ... Juste un peu de précipitation!)

Répondre

4

Je ne sais pas exactement depuis quand mod_rewrite permet à d'autres codes de statut que 3xx pour le drapeau R. Mais cela devrait le faire:

RewriteEngine on 
RewriteRule^- [L,R=503] 

Et si vous avez défini un document d'erreur personnalisé, utilisez cette option pour éviter des erreurs internes supplémentaires:

RewriteEngine on 
RewriteRule !^path/to/my-custom-error-document$ - [L,R=503] 

Modifier trouvé une meilleure solution en utilisant la variable d'environnement REDIRECT_STATUS:

RewriteEngine on 
RewriteCond %{ENV:REDIRECT_STATUS} !=503 
RewriteRule^- [L,R=503] 
4

Pour ajouter un peu plus, j'ai souvent les éléments suivants:

RewriteEngine on 
RewriteCond -f path/to/my-custom-error-document 
RewriteRule !^path/to/my-custom-error-document$ - [L,R=503] 

Ce que cela fait est de vérifier pour voir si le document d'erreur existe. Si c'est le cas, il sert la page d'erreur. Ce que cela me permet de faire est de vomir l'erreur personnalisée sans avoir à redémarrer Apache. Pour le remettre en place, je supprime (ou renommer) la page d'erreur.

+0

Les arguments de 'RewriteCond' sont dans le mauvais sens, il devrait être de la forme:' RewriteCond/absolute- chemin/vers/my-custom-error-document -f' – MrWhite

0

Merci les gars - a parfaitement fonctionné.

Voici la configuration exacte .htaccess je (sans mon adresse IP) lors de l'entretien:

RewriteEngine on 
RewriteCond %{REMOTE_HOST} !^123\.456\.789\.012$ 
RewriteCond %{ENV:REDIRECT_STATUS} !=503 
RewriteRule^- [L,R=503] 
Questions connexes