Переписывание Nginx для устранения неработающего «www»

Переписывание Nginx для устранения неработающего «www»

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

Первый блок сервера делает перенаправление 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.
}

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

решение1

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

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

Это позволит обработать как изменение хоста, так и изменение на HTTPS.

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

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

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

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

Связанный контент