Site em manutenção com mod_rewrite

Vamos descobrir como indicar que o site está em manutenção e direcionar as visitas à uma pagina específica de forma simples.
Para quem trabalha com desenvolvimento de sites, sempre chega aquele momento que o site precisa sofrer atualizações e muitas delas precisam que o site esteja offline, ou pelo menos que não acessem o banco de dados, ou API’s. Encontrei uma forma bem elegante e simples de fazer isso.

Para começar, basta ter certeza que seu mod_rewrite está habilitado no Apache, e criar um arquivo “.htaccess” na raiz do seu site, também chamado de DOCUMENT_ROOT.

E o que esse arquivo faz?
Caso exista um arquivo com um nome específico, ele direciona todo o tráfego do seu site para uma página específica. Desta forma, você pode ter uma pagina estática, informando seus visitantes do período de manutenção enquanto atualiza os arquivos da aplicação e/ou banco de dados. E para desativar o modo manutenção, basta apagar (ou renomear) o arquivo de manutenção, e todo o tráfego volta ao que era antes! Legal né?

Abaixo temos o conteúdo do arquivo .htaccess :

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{DOCUMENT_ROOT}/manutencao-on -f
   RewriteCond %{REQUEST_URI} !/manutencao.php$
   RewriteRule $ /manutencao.php [L]
</IfModule>

Vamos entender passo a passo o que ele faz:
Linha 1: Verificamos se o mod_rewrite está disponível no Apache.
Linha 2: Habilitamos o modulo de reescrita de URL.
Linha 3: Utilizando a Condição “-f”, verificamos a existência do arquivo manutencao-on no DOCUMENT_ROOT do site.
Linha 4: Verifica se o endereço de URI não termina com “manutencao.php”.
Linha 5: A regra então redireciona todas as paginas acessadas para manutencao.php.

Juntando tudo
Existindo o modulo mod_rewrite e habilitando-o, e caso exista um arquivo de manutenção na raiz do site, todo trafego é direcionado à pagina manutencao.php.

Exemplo:
A raiz do site, geralmente aponta para um arquivo index. O mod_rewrite então irá redirecionar para o arquivo manutencao, So que ao redirecionar, ele vem como um novo request e este tambem será redirecionado para o manutencao, gerando um novo request, que tambem será redirecionado… indefinidamente! A linha 4 justamente evita esse loop.

Para evitar que robôs do google, bing, ou qualquer outro crawler indexem o seu site enquanto estiver em manutenção, não se esqueça de adicionar os seguintes headers no seu arquivo manutencao.php:

<?php
# headers
header("HTTP/1.1 503 Service Temporarily Unavailable");
header("Status: 503 Service Temporarily Unavailable");
header("Retry-After: 3600"); 
?>
<html>
	<head>Meu Site</head>
 	<body style="background-color:#fffbef; color: #e95d2a">
		<h2>Estamos temporariamente fora de serviço!</h2>
      	<h3>Por favor retorne mais tarde!</h3>
 	</body>
</html>

Com os headers acima, você informa aos crawlers que o site está temporariamente indisponível, e que devem tentar novamente em 1 hora (3600 segundos), ou qualquer período que você preferir.

Conclusão
Uma vez adicionado o arquivo htaccess, tudo o que você precisa fazer, é criar um arquivo manutencao-on no DOCUMENT_ROOT do seu site, que os redirecionamentos começarão. Para finalizar, renomeie o arquivo para manutencao-off, (ou qualquer outra coisa) e o trafego estará de volta.

Espero que seja útil para vocês!

Abraço!

Leave a Reply

Your email address will not be published. Required fields are marked *