Como redirecionar www e forçar HTTPS pelo .htaccess
O mesmo site pode responder em quatro endereços diferentes: com e sem www, em http e em https. Para o visitante dá no mesmo; para o buscador, são quatro versões do mesmo conteúdo dividindo a autoridade entre si.
Escolher uma e mandar as outras três para ela é uma das correções de SEO mais baratas que existem — e cabe em cinco linhas.
Antes de começar
- Acesso ao Gerenciador de Arquivos do cPanel, ou FTP.
- Certificado SSL ativo — veja o guia de SSL. Forçar HTTPS sem certificado deixa o site inacessível.
Encontre o arquivo
O .htaccess fica na raiz do site, dentro de public_html. Ele começa com ponto, então é oculto: no Gerenciador de Arquivos, ative Configurações → Mostrar arquivos ocultos.
Se não existir, crie um arquivo com esse nome exato.
Antes de editar, baixe uma cópia. Um erro de sintaxe neste arquivo derruba o site inteiro com erro 500 — e a mensagem não diz qual linha.
Force o HTTPS
Esta é a regra mínima, que todo site deve ter:
RewriteEngine On
# http -> https
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Escolha entre www e sem www
Não existe opção melhor tecnicamente: o que importa é escolher uma e ser consistente. Use um dos dois blocos, nunca os dois.
# OPÇÃO A — tudo sem www (seudominio.com.br)
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [L,R=301]
# OPÇÃO B — tudo com www (www.seudominio.com.br)
# RewriteCond %{HTTP_HOST} !^www\. [NC]
# RewriteCond %{HTTP_HOST} ^(.+)$ [NC]
# RewriteRule ^(.*)$ https://www.%1/$1 [L,R=301]
Depois de escolher, atualize também o endereço do site nas configurações do WordPress e no Google Search Console, para tudo apontar para a mesma versão.
Junte tudo na ordem certa
Em site WordPress, as suas regras vão antes do bloco # BEGIN WordPress. O arquivo final fica assim:
RewriteEngine On
# http -> https
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# www -> sem www
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [L,R=301]
# BEGIN WordPress
# ... não mexa daqui para baixo ...
O bloco do WordPress é reescrito pelo próprio sistema quando você salva os links permanentes. Por isso as suas regras ficam fora dele — dentro, seriam apagadas.
Redirecione páginas que mudaram de endereço
Se você renomeou uma página, mande a URL antiga para a nova em vez de deixar dar 404. Assim o visitante que chegou por um link antigo encontra o conteúdo, e a autoridade daquele endereço é transferida.
# página específica
Redirect 301 /pagina-antiga https://seudominio.com.br/pagina-nova
# uma seção inteira
RedirectMatch 301 ^/blog/(.*)$ https://seudominio.com.br/artigos/$1
Teste com atenção
Abra as quatro variações e confirme que todas terminam no mesmo lugar, com um único salto:
curl -sI http://seudominio.com.br | head -3
curl -sI http://www.seudominio.com.br | head -3
curl -sI https://www.seudominio.com.br | head -3
curl -sI https://seudominio.com.br | head -3
As três primeiras devem responder 301 apontando para a versão escolhida. A última, 200.
Se algo não funcionar
ERR_TOO_MANY_REDIRECTS
Há redirecionamento em dois lugares ao mesmo tempo — por exemplo no .htaccess e no Cloudflare, ou duas regras se contradizendo. Deixe em um lugar só. Usando Cloudflare, o modo de SSL precisa ser Full, nunca Flexible.
Erro 500 depois de editar
Erro de sintaxe. Restaure a cópia que você baixou. Se não tiver cópia, renomeie o arquivo para .htaccess-old — o site volta — e no WordPress salve os links permanentes para gerar um novo.
O redirecionamento não acontece
Confirme que o arquivo está em public_html, com o nome exato .htaccess, e que suas regras não estão depois de outra com a flag [L] que interrompe o processamento antes.
Controle total das regras de reescrita, com PHP-FPM e cache no servidor.
Perguntas frequentes
www ou sem www: qual escolher?
Tanto faz para o buscador. Sem www é mais curto e virou o padrão da maioria dos sites novos. Se o seu já é conhecido com www, mantenha — trocar por gosto pessoal não traz ganho e ainda exige atualizar links e ferramentas.
301 ou 302?
Use 301 para mudanças definitivas: ele diz ao buscador que o endereço novo é o oficial e transfere a autoridade. O 302 é temporário e não transfere — serve para manutenção ou teste.
O .htaccess deixa o site mais lento?
O impacto é desprezível para meia dúzia de regras. Fica perceptível apenas com centenas de redirecionamentos listados um a um — nesse caso, vale agrupar com RedirectMatch por padrão.
Continue por aqui
Como ativar o SSL grátis no cPanel e forçar HTTPS
Certificado automático pelo AutoSSL, redirecionamento de HTTP para HTTPS e o que fazer quando o cadeado não aparece.
Como instalar o WordPress no cPanel em poucos minutos
Instalação pelo WordPress Toolkit, com HTTPS, atualizações automáticas e os ajustes que evitam dor de cabeça depois.
Como apontar um domínio para a hospedagem
Servidores de nome, registros A e CNAME, propagação — e como saber se já funcionou sem ficar recarregando a página.