Nginx reescreve para eliminar o “www” não funcionando

2

Eu examinei muitos tópicos de SE e fiz vários as pesquisas do Google e não consigo descobrir por que não consigo redirecionar www.mysite.com para mysite.com no meu servidor nginx.

O primeiro bloco de servidor faz o http://mysite.info - > https://mysite.info redirecionar como esperado. Então, eu não tenho certeza porque o segundo bloco de servidor não está fazendo o mesmo para o 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 opinião sobre o que está errado?

    
por tim peterson 28.08.2012 / 01:32

1 resposta

7

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

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

Isso cuidará da alteração no host, bem como da alteração para HTTPS.

Se você quisesse que o redirecionamento fosse agnóstico em 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;
    
por 28.08.2012 / 01:35