Назад | Перейти на главную страницу

Перезапись Nginx для устранения неработающего www

Я смотрел на многих SE темы и сделал различные поиск в гугле и не могу понять, почему я не могу перенаправить www.mysite.com к mysite.com на моем сервере nginx.

1-й серверный блок выполняет http://mysite.info -> https://mysite.info перенаправить, как и следовало ожидать. Поэтому я не уверен, почему второй серверный блок не делает то же самое для www.mysite.info -> mysite.info.

Вот соответствующая часть моего файла 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.
}

Есть мысли о том, что не так?

Вы перенаправляетесь на $server_name, который www.mysite.info во-вторых server block - поэтому все, что делает, это перенаправляет на HTTPS, а не меняет хост.

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

Это обработает изменение хоста, а также переход на HTTPS.

Если вы хотите, чтобы перенаправление было независимым от протокола, лучшим подходом было бы:

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

В последних версиях nginx это тоже работает (и должно быть немного быстрее):

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