Por mais que haja planejamento no desenvolvimento web no momento de passar uma versão de um site que esteja em homolagação para produção, não raramente é preciso colocar o site em manutenção. Na verdade, a manutenção ocorre não somente nessas situações, mas em diversas outras (por exemplo, a integridade dos arquivos que compõem um sistema web foi comprometida e é preciso colocar o sistema em manutenção para identificar o erro e/ou restaurar backups).
Dentre as diversas técnicas/recomendações para estas e outras situações, certamenta uma das mais indicadas é realizar um redirecionamento automático para sites em manutenção.
Saber redirecionar os visitantes para uma página de manutenção ou outra página temporária é um instrumento essencial para ter em seu cinto de ferramentas web. Usando .htaccess, redirecionar os visitantes para uma página de manutenção temporária é simples e eficaz. Tudo o que é preciso para redirecionar os visitantes é o seguinte código, colocado no arquivo .htaccess
na raiz do site:
1 2 3 4 5 6 7 8 |
# MAINTENANCE-PAGE REDIRECT <ifModule mod_rewrite.c> RewriteEngine on RewriteCond %{REMOTE_ADDR} !^123.456.789.000 RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC] RewriteCond %{REQUEST_URI} !.(jpe?g?|png|gif) [NC] RewriteRule .* /maintenance.html [R=302,L] </ifModule> |
Esta aí o código para o copiar-e-colar; mas, claro, existem alguns detalhes para aqueles que podem não estar familiarizados com o processo.
Explicação do código de redirecionamento
Explicando cada linha do código de redirecionamento mostrado acima, tem-se o seguinte:
- Meramente um comentário para explicar a finalidade do código;
- Checa pelo módulo
mod_rewrite
do Apache (termina na linha 8); - Habilita o motor de reescrita
mod_rewrite
do Apache (dependendo da configuração do seu servidor, essa linha pode ser desnecessária); - Verifica se o pedido está vindo de seu computador. Se sim, então o redirecionamento não acontece (se você for redirecionado, quem vai fazer a manutenção?); para que isso funcione, é preciso alterar os números nesta linha para bater com o seu próprio endereço IP;
- Impede que um loop infinito aconteça, testando o pedido contra o nome da página de manutenção;
- Impede que o redirecionamento aconteça com alguns tipos de imagem (afinal, sua página de manutenção pode conter algumas);
- Redireciona todas as requisições que atendam ambas condições de reescrita anteriores para a página de manutenção especificada; uma das melhores estratégias é responder com o código 302 (“Movido Temporariamente”).
Redirecionamento de tráfego com htaccess
Para redirecionar os visitantes para uma página de manutenção, coloque o código anterior em um arquivo .htaccess
localizado na raiz do site (se o arquivo já existe, edite-o). Isso garantirá que todas as páginas e recursos contidos dentro do domínio sejam redirecionados. Se é preciso redirecionar pedidos apenas de um subdiretório específico dentro do domínio, o arquivo .htaccess
contendo essas regras deve ser colocado neste diretório em questão (ao invés de na raiz).
Agora que o htaccess está no lugar, é preciso criar e fazer upload da página de manutenção, por exemplo, com o nome maintenance.html
. Este é um arquivo HTML comum, então você pode usar praticamente todos os recursos que a linguagem oferece – de fato, o arquivo não precisa ser, necessariamente, escrito em HTML; é possível usar, por exemplo, PHP para fazer tudo dinâmico, mas lembre-se de alterar as duas instâncias do nome do arquivo no código do .htaccess
para corresponder ao nome real do arquivo.
Múltiplos endereços IP
Para o caso de a manutenção ser feita por uma equipe ou alguma situação semelhante, também é possível indicar múltiplos endereço de IP para prevenir o redirecionamento. Basicamente, existem 2 maneiras.
A primeira consiste em adicionar mais instruções RewriteCond
ao código anterior:
1 2 3 4 5 6 7 8 9 10 |
# MAINTENANCE-PAGE REDIRECT <ifModule mod_rewrite.c> RewriteEngine on RewriteCond %{REMOTE_ADDR} !^123.456.789.000 RewriteCond %{REMOTE_ADDR} !^123.456.789.000 RewriteCond %{REMOTE_ADDR} !^123.456.789.000 RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC] RewriteCond %{REQUEST_URI} !.(jpe?g?|png|gif) [NC] RewriteRule .* /maintenance.html [R=302,L] </ifModule> |
Com este método, edite cada endereço IP para coincidir com o(s) seu(s) próprio(s) e/ou ou de sua equipe e e adicione/remova tantos IPs conforme necessário.
O segundo método é igualmente eficaz:
1 2 3 4 5 6 7 8 9 10 11 |
<limit GET POST PUT> Order Deny,Allow Deny from all Allow from 123.456.789.000 Allow from 123.456.789.000 </limit> ErrorDocument 403 /maintenance.html <files maintenance.html> Order Allow,Deny Allow from all </files> |
Este método é um pouco mais simples, mas não tão eficiente para SEO, já que os bots de indexação podem visitar o site enquanto a manutenção está acontecendo. O primeiro método envia uma resposta 302, enquanto o segundo envia uma menos precisa 403 (“Erro de Proibição”, que indica que o cliente não pode acessar os recursos por aquela requisição).
Use o método que você mais se identificou, levando sempre as necessidades/requisitos do projeto em consideração.
Considerações finais
Evidentemente, essas não são as únicas medidas que podem ser tomadas para redirecionamento automático para sites em manutenção. Por exemplo, é possível habilitar o pedido de senha via htaccess; permitir o acesso a alguma(s) categoria(s) de visitantes; solicitar redirecionamentos específicos; e muito mais.
Entretanto, para manter no básico a proposta do artigo de mostrar como fazer redirecionamento automático para quando um site ou sistema web está em manutenção, os códigos mostrados bastam.
Mas, até para o básico, há sempre novas técnicas e possibilidades possíveis. Então, caso tenha alguma outra dica ou maneira diferente de fazer redirecionamento automático para sites em manutenção, compartilhe fazendo um comentário!