Reescrita do Nginx para eliminar "www" que não funciona

Reescrita do Nginx para eliminar "www" que não funciona

Eu olhei muitosTópicos SEe fiz váriospesquisas no Googlee não consigo descobrir por que não consigo redirecionar www.mysite.compara mysite.commeu servidor nginx.

O primeiro bloco do servidor faz o http://mysite.info-> https://mysite.inforedirecionamento conforme esperado. Portanto, não sei por que o segundo bloco do servidor não está fazendo o mesmo para www.mysite.info-> mysite.info.

Aqui está a parte relevante do meu arquivo nginx.conf:

server {
    server_name mysite.info;
    rewrite ^ https://$server_name$request_uri? permanent;
}

server {
    server_name www.mysite.info;
    rewrite ^ https://mysite.info$request_uri? permanent;
}

server {
    listen   443;
    ssl    on;
    server_name mysite.info;
    # other directives, handling PHP, etc.
}

Alguma ideia sobre o que está errado?

Responder1

Você está redirecionando para $server_name, que está www.mysite.infono segundo serverbloco - então tudo o que está fazendo é redirecionar para HTTPS, não alterar o host.

rewrite ^ https://mysite.info$request_uri? permanent;

Isso cuidará da mudança no host, bem como da mudança para HTTPS.

Se você quisesse que o redirecionamento fosse independente de protocolo, uma abordagem melhor seria:

rewrite ^ $scheme://mysite.info$request_uri? permanent;

Nas versões recentes do nginx, isso também funciona (e deve ser um pouco mais rápido):

return 301 $scheme://mysite.info$request_uri;

informação relacionada