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 URLstatus: pode serpermanent(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/novoDiretiva RedirectMatch (com expressão regular)
Útil quando você quer capturar padrões sem entrar em reescrita complexa. Sintaxe:
- Ouça o áudio com a tela desligada
- Ganhe Certificado após a conclusão
- + de 5000 cursos para você explorar!
Baixar o aplicativo
RedirectMatch [status] regex URLExemplo (redirecionar qualquer coisa em /blog/... para /artigos/...):
RedirectMatch 301 ^/blog/(.*)$ https://exemplo.com/artigos/$1Observaçã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
No VirtualHost HTTP (porta 80) ou no VirtualHost principal do domínio, adicione:
Redirect permanent /antigo https://exemplo.com/novoRecarregue a configuração do Apache (use o comando apropriado do seu sistema).
Teste com
curl(sem seguir redirecionamento):curl -I http://exemplo.com/antigoVocê deve ver algo como:
HTTP/1.1 301 Moved Permanentlye 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 /novoPara migrações e canonicalização, prefira destino absoluto para ficar explícito.
Se
/antigotiver subpáginas e você quiser redirecionar tudo, useRedirectMatch: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
No VirtualHost da porta 80 do domínio, adicione:
Redirect permanent / https://exemplo.com/Recarregue a configuração do Apache.
Teste com
curl:curl -I http://exemplo.com/qualquer/caminhoO esperado é:
HTTP/1.1 301 Moved Permanentlye:
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 tempe depois troque parapermanent.
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)
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/No VirtualHost canônico (
www), sirva o site normalmente (sem redirecionar para si mesmo).Teste o host não-canônico:
curl -I https://exemplo.com/alguma/paginaEsperado:
HTTP/1.1 301 Moved Permanentlye:
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/antigoO que observar:
HTTP/1.1 301ouHTTP/1.1 302Location: ...
Seguir redirecionamentos (útil para ver a cadeia)
curl -I -L http://exemplo.com/antigoSe 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.com→https://exemplo.com→https://www.exemplo.com. Se possível, façahttp://exemplo.comir direto parahttps://www.exemplo.comno 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 temppode reduzir dor de cabeça; depois troque parapermanent.
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 -Ie, se necessário, comcurl -I -Lpara 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ário | Status recomendado | Motivo |
|---|---|---|
| URL antiga substituída definitivamente | 301 | Migração permanente |
| Campanha/temporário | 302 | Evita “fixar” mudança |
| Forçar HTTPS | 301 | Canonicalização de esquema |
| www vs sem www (canônico) | 301 | Canonicalização de host |