Poner un web en modo mantenimiento con mod_rewrite
Cuando tenemos que hacer alguna intervención en un sitio que está en producción queda muy mal andar tocando cosas y que los usuarios vean casques por todos lados. Para evitar esto podemos poner el sitio en modo mantenimiento de forma temporal mientras realizamos la actuación. De esta forma los usuarios que lleguen al web verán un aviso de que el sitio está fuera de servicio temporalmente. Hay diversas formas de conseguirlo, vamos a ver cómo hacerlo con el módulo mod_rewrite de Apache.
Vamos a suponer que tenemos disponible y activado el módulo mod_rewrite de Apache y que podemos hacer uso de los archivos .htaccess. Si no es así tendrás que configurar Apache previamente.
En el archivo .htaccess del raíz del sitio web añadiremos las siguientes líneas:
ErrorDocument 503 /maintenance.html RewriteCond %{DOCUMENT_ROOT}/maintenance -f RewriteCond %{REQUEST_URI} !/maintenance.html$ RewriteRule ^.*$ / [R=503,L] |
La primera línea lo que hace es indicar a Apache que ante un código de error 503 debe redirigir a la página /maintenance.html. Esta página será la que mostremos a los usuarios cuando el web no esté disponible. Según el protocolo HTTP/1.1, el código 503 corresponde a Service Unavailable
The server is currently unable to handle the request due to a temporary overloading or maintenance of the server.
La siguientes líneas son las encargadas de realizar la redirección a la página de mantenimiento. Para ello se comprueba la existencia de un archivo de nombre «maintenance» en el raíz del sitio web. Si este archivo existe y el recurso que se pide no es la página de mantenimiento «maintenance.html», se devuelve un código 503, con lo que Apache detectará el código y redirigirá a la página de mantenimiento. De esta forma podemos activar el modo de mantenimiento simplemente creando el archivo «maintenance» y desactivarlo borrándolo.
Para activar el modo de mantenimiento:
$ touch maintenance |
Para desactivar el modo de mantenimiento:
$ rm maintenance |
Normalmente la página de mantenimiento tendrá también algún recurso gráfico, por lo que habría que añadir estos recursos también como condiciones para que en el caso de que se pidan no se devuelva el error 503. En el siguiente fragmento se supone que la página de mantenimiento utiliza una imagen «/imgs/maintenance.png», por lo que se añade este recurso a las condiciones.
ErrorDocument 503 /maintenance.html RewriteCond %{DOCUMENT_ROOT}/maintenance -f RewriteCond %{REQUEST_URI} !/maintenance.html$ RewriteCond %{REQUEST_URI} !/imgs/maintenance.png$ RewriteCond %{REMOTE_ADDR} !^999\.999\.999\.999 RewriteRule ^.*$ / [R=503,L] |
Además, seguramente querremos poder acceder desde nuestra dirección IP al web y no a la página de mantenimiento, para lo cual añadimos otra condición sobre la cabecera REMOTE_ADDR
, indicando la dirección IP desde la que nos conectamos (la dirección 999.999.999.999 no existe, tendrías que poner la tuya).
Los comentarios están cerrados.