Redirecionar HTTP para HTTPS e o www para o domínio simples, no nginx ou no Apache

Num VPS escolhe-se um único endereço canónico (por exemplo https://seudominio.tld) e manda-se tudo o resto para lá com um redireccionamento 301: o HTTP para o HTTPS, e o www para o nome simples (ou o contrário, se preferir o www). No nginx faz-se com return 301; no Apache, com Redirect permanent. É tudo configuração do servidor, sem .htaccess.

Pré-requisito: já ter o certificado a funcionar para os dois nomes (com e sem www). Se só um tem certificado, o visitante que for ao outro vê o aviso do navegador antes de chegar ao redireccionamento. Veja o certificado com o certbot.

No nginx

1 Um bloco para a porta 80 que reencaminha tudo, mantendo o caminho e os parâmetros:server {
listen 80;
server_name seudominio.tld www.seudominio.tld;
return 301 https://seudominio.tld$request_uri;
}
2 Um bloco para o www em HTTPS que manda para o nome simples (precisa do certificado, mesmo que só reencaminhe):server {
listen 443 ssl;
server_name www.seudominio.tld;
ssl_certificate /etc/letsencrypt/live/seudominio.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/seudominio.tld/privkey.pem;
return 301 https://seudominio.tld$request_uri;
}
3 O bloco do site verdadeiro fica só com server_name seudominio.tld; e listen 443 ssl;.
4 Teste e recarregue: sudo nginx -t e sudo systemctl reload nginx.

No Apache

1 O virtual host da porta 80 reencaminha tudo:<VirtualHost *:80>
ServerName seudominio.tld
ServerAlias www.seudominio.tld
Redirect permanent / https://seudominio.tld/
</VirtualHost>
2 O virtual host do www em 443 (com as mesmas linhas de certificado que o do site) acaba com Redirect permanent / https://seudominio.tld/.
3 Teste e recarregue: sudo apache2ctl configtest (ou apachectl no AlmaLinux e Rocky) e sudo systemctl reload apache2.

Conferir que ficou certo

Do seu computador: curl -I http://www.seudominio.tld/pagina. A resposta deve ser 301 e a linha Location: deve ser o endereço final completo, com a página no fim. Siga para o passo seguinte com curl -I no endereço da Location até ver um 200. Mais de dois saltos significa que há redireccionamentos a mais.

O que vê Causa provável
“Demasiados redireccionamentos” (loop) Há um serviço à frente (Cloudflare em modo flexível, por exemplo) a falar em HTTP com o seu servidor, e o servidor manda-o para HTTPS outra vez. Veja ligar o SSL no Cloudflare sem partir o site.
O www mostra o aviso de certificado O certificado não inclui o nome com www. Emita-o para os dois.
A página perde o caminho Escreveu o destino sem $request_uri (nginx) ou sem a barra final em Redirect (Apache).
Continua a abrir em HTTP O bloco da 80 não é o que atende o nome; confira o server_name e se o site predefinido está activo.
Use 301 só quando tiver a certeza. Os navegadores guardam o 301 durante muito tempo; um destino errado fica agarrado a quem já o visitou. Enquanto ensaia, use 302 (return 302 ...) e troque para 301 quando estiver certo.
O certbot sabe fazer isto sozinho: a opção --redirect (ou a pergunta que ele faz) acrescenta o redireccionamento HTTP para HTTPS. O do www para o nome simples é seu. Para redireccionar páginas e domínios com cuidado em relação ao Google, veja redireccionamentos 301.

O site deixou de abrir depois de mexer na configuração? Se o servidor deixou de responder à rede, vemos do nosso lado.

Abrir um pedido de suporte

VEJA TAMBÉM

HTTPS num contentor: certificado e domínio

Quando a renovação do certbot falha

Sem cadeado no site: as causas, por ordem

Redirecionar para HTTPS com .htaccess (hospedagem partilhada)

PRODUTO RECOMENDADO

Registe o seu domínio .com

Garanta o nome da sua empresa antes que outro o registe. a partir de 15.300,00 Kz/ano

Pesquisar domínio
  • 0 Utilizadores acharam útil
Esta resposta foi útil?