Gerador de Redirect (.htaccess)
Gera regras de redirecionamento Apache para .htaccess com redirect 301 (permanente) ou 302 (temporário). Suporta múltiplas regras.
Cole pares "origem destino" separados por espaço, um por linha:
Redirects no Apache via .htaccess em profundidade: 301 vs 302, mod_alias vs mod_rewrite e migração de SEO
Redirects no Apache via .htaccess são uma das operações mais comuns no ciclo de vida de um site: migração de SEO após troca de CMS, mudança de HTTP para HTTPS, consolidar www e domínio apex, aposentar URLs, normalizar trailing slash ou subir um domínio novo sem perder PageRank. O Apache oferece três mecanismos diferentes para expressar um redirect, e escolher o certo — junto do status HTTP correto — afeta diretamente como o browser cacheia a resposta e como buscadores transferem autoridade.
Este gerador emite diretivas Redirect para os pares colados; a referência abaixo cobre as três abordagens, todos os status codes que você pode precisar, padrões de HTTPS e host canônico, pegadinhas de performance do .htaccess e como debugar um loop de redirect em produção.
Três jeitos de escrever um redirect
Redirect(mod_alias) — o mais simples.Redirect 301 /old-page /new-page. Casa um prefixo exato e emite o headerLocation. Sem regex.RedirectMatch(mod_alias) — com regex.RedirectMatch 301 ^/produtos/antigo/(.*)$ /produtos/novo/$1. Ideal para redirects em massa com grupos de captura.RewriteRule(mod_rewrite) — o mais poderoso. Suporta condições (RewriteCond), flags e acesso a variáveis do request. Use sempre que o redirect depender do host, scheme, user agent ou qualquer header.
Códigos HTTP para redirects
- 301 Moved Permanently — browsers cacheiam para sempre, buscadores transferem PageRank. Padrão para migração de SEO.
- 302 Found — temporário, sem cache. Use em testes A/B ou manutenção curta.
- 303 See Other — após um POST, força o cliente a fazer GET na nova URL (padrão Post-Redirect-Get).
- 307 Temporary Redirect — como o 302 mas preserva o método HTTP (POST continua POST).
- 308 Permanent Redirect — sucessor moderno do 301; preserva o método. Prefira 308 ao 301 só se precisar que POST/PUT sejam repetidos na nova URL.
HTTPS, www canônico e padrões de trailing slash
# Forçar HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]
# Remover www
RewriteCond %{HTTP_HOST} ^www\.exemplo\.com$ [NC]
RewriteRule (.*) https://exemplo.com/$1 [R=301,L]
# Adicionar trailing slash (evitar loops checando REQUEST_FILENAME)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]
Quando você encadeia redirects, o Apache aborta depois de cerca de 10 redirects internos para evitar loops. Sempre confirme os headers com curl -I https://exemplo.com/pagina-antiga — você deve ver um único hop 301, não uma cadeia de 301 → 301 → 200.
Performance e debugging
O Apache lê todo .htaccess a cada request, do diretório da URL até a raiz, então arquivos pesados adicionam latência. Quando você controla o virtual host, mova as regras para <VirtualHost> com AllowOverride None para ganho mensurável. Para debugar, suba LogLevel rewrite:trace3 temporariamente — o log de acesso vai imprimir cada regra que o request casou. A diretiva legada RewriteLog foi removida no Apache 2.4.
Checklist de migração de SEO
- Use 301 (ou 308) para que buscadores transfiram os sinais de ranking.
- Mapeie URLs antigas página-a-página para o equivalente mais próximo. Redirecionar tudo para a home desperdiça a autoridade que você levou anos para construir.
- Mantenha os redirects no ar por pelo menos 12 meses — o Google pode continuar recrawleando as URLs antigas por esse tempo.
- Atualize links internos para apontarem direto para as URLs novas; redirects devem pegar tráfego externo, não a navegação interna.
- Resubmeta o novo sitemap no Search Console e acompanhe o relatório "Cobertura" para erros de crawl.
FAQ
Qual a diferença entre 301 e 302? 301 diz "este recurso mudou permanentemente" — browsers cacheiam a nova URL agressivamente e buscadores transferem PageRank. 302 é temporário, sem cache, e não passa sinais de ranking. Use 301 para migrações, 302 só para testes A/B curtos.
Como redirecionar centenas de URLs em massa? Cole todos os pares neste gerador (um por linha) ou use RedirectMatch com regex quando as URLs seguem um padrão. Para listas muito longas, um RewriteMap apontando para arquivo texto é mais rápido porque o Apache faz hash na memória.
Como confirmar se um redirect retorna 301 mesmo? Rode curl -I -L https://exemplo.com/pagina-antiga. A primeira resposta deve ser HTTP/1.1 301 seguida de Location:. Se vir 302 ou uma cadeia de vários 301, ajuste a regra.
Por que estou pegando um loop de redirect? O destino casa a mesma regra e volta. Adicione um RewriteCond para pular requests já reescritos, por exemplo RewriteCond %{ENV:REDIRECT_STATUS} ^$, ou ajuste o padrão de origem para não casar o destino.
Ferramentas Relacionadas
Gerador de Redirect (Nginx)
Gera regras de redirecionamento Nginx (return 301/302) para uso em location blocks. Aceita lista de pares "origem destino".
Gerador de RewriteRule (.htaccess)
Gera regras RewriteRule (mod_rewrite) para .htaccess. Inclui flag [L,R=301,QSA] e suporte a regex com grupos de captura.
Gerador .htpasswd Multi-Algoritmo
Cria arquivos .htpasswd para Apache e Nginx com bcrypt, APR1, SHA-256, SHA-512 ou crypt, com múltiplos usuários em uma única exportação.