Pesquisa de site

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ê!