Formas de pagamento Abuse

Como redirecionar de WWW para não-WW no Nginx

22.02.2022, 20:05


Para otimizar um sítio Web de acordo com as regras de SEO, este deve ter um domínio. Um subdomínio com www é considerado um domínio separado e, caso seja inacessível, conduzirá à duplicação de conteúdos. O que é que isso significa? Duplicados - elementos não desejados, que se tornam frequentemente a causa de uma diminuição da posição do sítio nos motores de busca. É por isso que vale a pena fazer um redireccionamento do domínio www para sem www. Assim, no início, o subdomínio www era utilizado para indicar ao servidor que ele não pode implantar um servidor Web e alojar o sítio. Agora isso já não é necessário. Neste artigo vamos ver como fazer um redireccionamento de www para sem www no Nginx.

Como fazer um redireccionamento sem WWW no NGINX

A maneira mais simples de fazer um redirecionamento no Nginx para o domínio www é criar uma seção de servidor separada para ele e redirecionar a partir daí. Por exemplo:

server {
server_name www.losst.ru;
return 301 $scheme://losst.ru$request_uri;
}

No caso em que é necessário designar o tratamento de www e não-www na mesma secção de servidor, é possível usar uma condição e uma expressão regular. Quando a variável host tiver as letras www no início, deve devolver um código de resposta 301 e uma ligação para a qual o utilizador deve ser redireccionado:

if ($host ~* ^www.(.*)$) {
return 301 $scheme://$server_name$request_uri;
}

O código deve ser adicionado à secção do servidor do sítio para o qual pretende configurar o redireccionamento. Se estiver a utilizar um certificado SSL LetsEncrypt, terá de gerar uma validação tanto para o domínio www como para o domínio não-www. O pedido de confirmação deve devolver uma resposta, não um redireccionamento. Para o fazer, pode criar uma variável $need_redirect e depois alterar o seu valor com algumas condições:

set $need_redirect "0";
if ($host ~* ^www.(.*)$) {
set $need_redirect "1";
}
if ($request_uri ~* "well-known") {
set $need_redirect "0";
}
if ( $need_redirect ~ "1") {
return 301 https://$server_name$request_uri;

Quando o URL contém a palavra well-known, que é utilizada no pedido de validação de domínio para um certificado SSL, o redireccionamento falhará. Guardar as definições. Guardar as definições e reiniciar o Nginx:

nginx -s reload

Ou:

sudo systemctl restart nginx

Em seguida, é possível testar se o redirecionamento funciona usando curl:

curl -I www.losst.ru

O redireccionamento será devolvido, o campo Location tem um URL para onde redirecionar o utilizador. Mas se tentar aceder ao URL a partir do LetsEncrypt, não haverá redireccionamento:

curl -I https://www.losst.ru/.well-known/acme-challenge/xxxxxxxxxxxxxxxxxxxxxxx

Tudo funciona como esperado. Este é o fim da instrução.