Como realizar o redirecionamento interno com mod_rewrite no Apache
Neste artigo e no próximo explicaremos como usar mod_rewrite, para mapear certas solicitações HTTP para outras páginas de um site ou para uma URL externa.
Ou seja, este conhecido módulo Apache permitirá redirecionar uma URL para outra, que ilustraremos através de exemplos práticos.
Leitura sugerida: 5 dicas para aumentar o desempenho do seu servidor Web Apache
NOTA: Os exemplos abaixo pressupõem que você esteja pelo menos um pouco familiarizado com Expressões regulares compatíveis com Perl (PCRE). Como esse tópico está fora do escopo deste artigo, consulte a documentação do Perl 5 versão 24.0 para obter mais detalhes sobre PCRE.
Antes de continuar, certifique-se de que o módulo de reescrita esteja carregado. Embora este seja o comportamento padrão no CentOS e distribuições similares, no Debian e derivados você precisará carregá-lo manualmente da seguinte forma:
a2enmod rewrite
Configurando o Apache para usar o módulo mod_rewrite
Para simplificar, vamos usar o site padrão em uma caixa do CentOS 7 (IP 192.168.0.100) para explicar como usar o mod_rewrite ( DocumentRoot: /var/www/html, arquivo de configuração: /etc/httpd/conf/httpd.conf).
Para que o Apache use este módulo, adicione a seguinte linha ao arquivo de configuração:
RewriteEngine on
É importante ressaltar que esta configuração não será herdada pelos hosts virtuais na mesma caixa.
Portanto, você precisará adicionar RewriteEngine para cada host virtual onde deseja usar regras de reescrita.
Redirecionamento interno: mapeando uma URL para outra no mesmo host virtual
Um redirecionamento interno é o exemplo mais simples de mod_rewrite. Se você quiser redirecionar todas as solicitações de default.aspx para index.html, adicione a seguinte linha (também conhecida como regra de reescrita) em RewriteEngine > em:
RewriteRule "^/default\.aspx$" "/index.html"
e não se esqueça de reiniciar o Apache para que as alterações tenham efeito.
Isso pode ser útil se o seu site foi originalmente projetado usando ASP e posteriormente alterado para HTML5 simples. Os motores de busca terão o arquivo .aspx
indexado, mas esse arquivo não existe mais.
Nesse caso, você precisará encontrar uma maneira de redirecionar a solicitação para que seus visitantes em potencial não encontrem uma página de erro. Para testar, vamos criar um arquivo HTML simples chamado index.html
dentro de /var/www/html com o seguinte conteúdo:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>New site</title>
</head>
<body>
<h2>Default.aspx was here, but now it's index.html</h2>
</body>
</html>
Os sinais caret e cifrão farão com que a expressão regular corresponda a qualquer string começando com /default
e terminando com .aspx
, respectivamente.
Leitura sugerida: Instale o Mod_Pagespeed para acelerar o desempenho do Apache em até 10x
Agora inicie seu navegador e aponte-o para 192.168.0.100/default.aspx. Se tudo correr como esperado, o Apache deverá servir index.html
.
No entanto, o usuário final ainda verá default.aspx
na barra de endereço, fazendo com que a alteração seja totalmente transparente:
Se você quiser que o URL na barra de endereço mostre que o servidor está realmente servindo index.html
em vez de uma página chamada default.aspx
, adicione [R, L]
até o final da regra de reescrita da seguinte forma:
RewriteRule "^/default\.aspx$" "/index.html" [R,L]
Aqui [R,L]
estão dois sinalizadores opcionais que indicam que um redirecionamento HTTP completo deve ser emitido para o navegador (R)
e que nenhuma outra regra deve ser processada:
Observe como a barra de endereço agora mostra index.html
, como esperado, em vez de default.aspx
como acontecia anteriormente.
Resumo
Neste artigo explicamos como usar mod_rewrite para realizar redirecionamento interno. Fique ligado no próximo post onde aprenderemos como redirecionar para um recurso que foi movido para um servidor diferente e como exibir conteúdo personalizado com base no navegador do usuário. Até então, consulte a documentação do Apache 2.4 para obter uma lista completa dos sinalizadores de reescrita disponíveis.
Como sempre, sinta-se à vontade para usar o formulário de comentários abaixo se tiver alguma dúvida ou feedback sobre este artigo. Estamos ansiosos para ouvir de você!