Redirecionamentos no Apache: Redirect, RedirectMatch e boas práticas

Capítulo 11

Tempo estimado de leitura: 6 minutos

+ Exercício

O que é um redirecionamento HTTP

Um redirecionamento é uma resposta do servidor dizendo ao cliente (navegador, bot, API) que o recurso solicitado mudou de lugar. Em vez de entregar o conteúdo, o Apache responde com um status code (por exemplo, 301 ou 302) e um cabeçalho Location apontando para a nova URL.

No Apache, redirecionamentos simples e seguros podem ser feitos com o módulo mod_alias, usando principalmente as diretivas Redirect e RedirectMatch. Elas são ideais quando você quer apenas “mover” caminhos/URLs sem regras complexas.

301 vs 302: quando usar e impactos práticos

301 (Moved Permanently)

  • Use quando a mudança é definitiva (ex.: URL antiga foi substituída pela nova).
  • Cache: navegadores e proxies tendem a cachear com mais agressividade. Em testes, você pode “ficar preso” no redirecionamento até limpar cache.
  • SEO (nível essencial): mecanismos de busca tendem a consolidar sinais para a URL nova ao longo do tempo.

302 (Found / Temporary Redirect)

  • Use quando a mudança é temporária (ex.: manutenção, campanha, teste A/B simples).
  • Cache: geralmente menos persistente que 301, mas ainda pode haver cache dependendo de cabeçalhos e intermediários.
  • SEO (nível essencial): tende a manter a URL original como principal por mais tempo.

Regra prática

  • Se você está migrando uma rota antiga para uma nova e não pretende voltar: 301.
  • Se é um desvio provisório: 302.

mod_alias na prática: Redirect e RedirectMatch

Diretiva Redirect (mais simples)

Sintaxe típica:

Redirect [status] URL-path URL
  • status: pode ser permanent (301), temp (302) ou um código numérico (ex.: 301).
  • URL-path: caminho no site, como /antigo.
  • URL: destino completo (recomendado) ou relativo.

Exemplo:

Redirect permanent /antigo https://exemplo.com/novo

Diretiva RedirectMatch (com expressão regular)

Útil quando você quer capturar padrões sem entrar em reescrita complexa. Sintaxe:

Continue em nosso aplicativo e ...
  • Ouça o áudio com a tela desligada
  • Ganhe Certificado após a conclusão
  • + de 5000 cursos para você explorar!
ou continue lendo abaixo...
Download App

Baixar o aplicativo

RedirectMatch [status] regex URL

Exemplo (redirecionar qualquer coisa em /blog/... para /artigos/...):

RedirectMatch 301 ^/blog/(.*)$ https://exemplo.com/artigos/$1

Observação: a regex casa com o caminho da URL (path). Use com cuidado para não criar loops.

Onde colocar as regras

Você pode colocar regras de mod_alias dentro do <VirtualHost> do site correspondente. Isso ajuda a manter o comportamento isolado por domínio e reduz efeitos colaterais.

Exemplo de estrutura (apenas para contextualizar o local):

<VirtualHost *:80> ... regras aqui ... </VirtualHost>

Exercício 1: redirecionar /antigo para /novo

Objetivo

Quando alguém acessar http://exemplo.com/antigo, deve ir para https://exemplo.com/novo com 301.

Passo a passo

  1. No VirtualHost HTTP (porta 80) ou no VirtualHost principal do domínio, adicione:

    Redirect permanent /antigo https://exemplo.com/novo
  2. Recarregue a configuração do Apache (use o comando apropriado do seu sistema).

  3. Teste com curl (sem seguir redirecionamento):

    curl -I http://exemplo.com/antigo

    Você deve ver algo como:

    HTTP/1.1 301 Moved Permanently

    e um cabeçalho:

    Location: https://exemplo.com/novo

Variações úteis

  • Se você quiser manter o mesmo esquema (http/https) e apenas mudar o caminho, pode usar destino relativo:

    Redirect permanent /antigo /novo

    Para migrações e canonicalização, prefira destino absoluto para ficar explícito.

  • Se /antigo tiver subpáginas e você quiser redirecionar tudo, use RedirectMatch:

    RedirectMatch 301 ^/antigo(/.*)?$ https://exemplo.com/novo$1

Exercício 2: forçar HTTPS (sem reescrita complexa)

Objetivo

Qualquer acesso em HTTP deve ser redirecionado para HTTPS mantendo o mesmo caminho.

Abordagem recomendada

Use um VirtualHost na porta 80 apenas para redirecionar tudo para o host em HTTPS. Com mod_alias, você pode redirecionar a raiz e, por consequência, todo o conteúdo abaixo dela.

Passo a passo

  1. No VirtualHost da porta 80 do domínio, adicione:

    Redirect permanent / https://exemplo.com/
  2. Recarregue a configuração do Apache.

  3. Teste com curl:

    curl -I http://exemplo.com/qualquer/caminho

    O esperado é:

    HTTP/1.1 301 Moved Permanently

    e:

    Location: https://exemplo.com/qualquer/caminho

Cuidados

  • Evite loop: coloque esse redirecionamento apenas no VirtualHost de HTTP. No VirtualHost de HTTPS, não faça um redirecionamento global para HTTPS novamente.
  • Teste com 302 antes (opcional): se estiver validando em produção e quer reduzir risco de cache persistente, comece com Redirect temp e depois troque para permanent.

Exercício 3: canonicalização básica de domínio (www vs sem www)

Objetivo

Escolher um domínio canônico e redirecionar o outro para ele. Exemplo: definir https://www.exemplo.com como canônico e redirecionar https://exemplo.com para https://www.exemplo.com.

Por que isso importa (nível essencial)

  • Evita conteúdo duplicado acessível por dois hosts diferentes.
  • Ajuda consistência de links e cache.

Estratégia sem reescrita complexa

Crie um VirtualHost “alias” para o host não-canônico que apenas redireciona tudo para o canônico. Isso é simples, previsível e não depende de regras elaboradas.

Passo a passo (exemplo: sem www → www)

  1. Garanta que o host não-canônico tenha um VirtualHost próprio em HTTP e HTTPS (se você atende ambos). Dentro dele, use:

    Redirect permanent / https://www.exemplo.com/
  2. No VirtualHost canônico (www), sirva o site normalmente (sem redirecionar para si mesmo).

  3. Teste o host não-canônico:

    curl -I https://exemplo.com/alguma/pagina

    Esperado:

    HTTP/1.1 301 Moved Permanently

    e:

    Location: https://www.exemplo.com/alguma/pagina

Se você prefere www → sem www

Basta inverter o destino:

Redirect permanent / https://exemplo.com/

Verificando redirecionamentos com curl -I

Checar apenas cabeçalhos

curl -I http://exemplo.com/antigo

O que observar:

  • HTTP/1.1 301 ou HTTP/1.1 302
  • Location: ...

Seguir redirecionamentos (útil para ver a cadeia)

curl -I -L http://exemplo.com/antigo

Se houver múltiplos saltos, o -L ajuda a identificar cadeias longas (ex.: HTTP → HTTPS → www). Idealmente, mantenha o número de saltos baixo.

Boas práticas e armadilhas comuns

Prefira redirecionar diretamente para o destino final

  • Evite cadeias: http://exemplo.comhttps://exemplo.comhttps://www.exemplo.com. Se possível, faça http://exemplo.com ir direto para https://www.exemplo.com no VirtualHost de HTTP do host não-canônico.

Use 302 durante testes quando fizer sentido

  • Como 301 pode ser cacheado, um erro pode persistir no navegador. Em validações iniciais, usar Redirect temp pode reduzir dor de cabeça; depois troque para permanent.

Evite loops

  • Um loop acontece quando A redireciona para B e B redireciona de volta para A (ou para si mesmo). Teste sempre com curl -I e, se necessário, com curl -I -L para ver a cadeia.

Seja específico por host

  • Para canonicalização, prefira VirtualHosts separados: um serve conteúdo (canônico) e o outro só redireciona (não-canônico). Isso reduz chance de regras conflitantes.

Escolha o status correto

CenárioStatus recomendadoMotivo
URL antiga substituída definitivamente301Migração permanente
Campanha/temporário302Evita “fixar” mudança
Forçar HTTPS301Canonicalização de esquema
www vs sem www (canônico)301Canonicalização de host

Agora responda o exercício sobre o conteúdo:

Ao configurar um redirecionamento para forçar HTTPS sem regras complexas, qual prática ajuda a evitar loops de redirecionamento no Apache?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

O redirecionamento para HTTPS deve ficar no VirtualHost de HTTP (porta 80). Se você também redirecionar globalmente no VirtualHost de HTTPS, pode criar um loop ao tentar redirecionar para o mesmo destino repetidamente.

Próximo capitúlo

Reescrita de URLs com mod_rewrite: conceitos, regras e depuração

Arrow Right Icon
Capa do Ebook gratuito Apache para Iniciantes: Configuração Essencial, Virtual Hosts e Segurança Básica
69%

Apache para Iniciantes: Configuração Essencial, Virtual Hosts e Segurança Básica

Novo curso

16 páginas

Baixe o app para ganhar Certificação grátis e ouvir os cursos em background, mesmo com a tela desligada.