NGinx. www на non-www переадресация. Склейка доменов. 301 редирект

Как известно для поисковых систем сайты расположенные на именах example.com и www.example.com это два абсолютно разных сайта. Обычно же это один и тот же сайт, доступный по двум разным ссылкам сразу.
SEO-шники рекомендуют настраивать безусловную переадресацию на один из двух адресов. Далее в примере я буду считать, что у нас есть сайт, доступный по двум ссылкам одновременно и нужно все ссылки с префиксом www заменять на чистое доменное имя.
Что имеем на данный момент в конфиге nginx:

server	{
	listen 80 default;
	server_name tradenark.com.ua www.tradenark.com.ua;
	index index.php;
        ...
        }

Для того то бы переадресовывать запросы на без-www домен необходимо изменить конфигурацию до

server	{
	listen 80;
	server_name www.tradenark.com.ua;
	return 301 https://tradenark.com.ua$request_uri;
	}
server	{
	listen 80 default;
	server_name tradenark.com.ua;
	index index.php;
        ...
        }

После применения новой конфигурации можем проверить результат

# curl -I http://www.tradenark.com.ua
HTTP/1.1 301 Moved Permanently
Server: nginx/1.10.2
Date: Sun, 04 Dec 2016 14:05:40 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Location: https://tradenark.com.ua/

Отлично, работает!
Параметр $request_uri позволяет передавать весь URI на новый домен. Пример:

# curl -I https://tradenark.com.ua/blog/123/11/44
HTTP/1.1 301 Moved Permanently
Server: nginx/1.10.2
Date: Sun, 04 Dec 2016 14:28:24 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Location: https://tradenark.com.ua/blog/123/11/44

Аналогично нужно поступить, если у нас новый домен и все запросы нужно переадресовать на него

server	{
	listen 80;
	server_name olddomain.com.ua;
	return 301 http://newdomain.com.ua$request_uri;
	}
server	{
	listen 80 default;
	server_name newdomain.com.ua;
	index index.php;
        ...
        }

Теперь дальше. К примеру мы добавили поддержку SSL на сайт и теперь опять таки сайт доступен по двум протоколам.
Для того что бы настроить переадресацию необходимо внести такие строки в конфигурацию:

server	{
	listen 80;
	server_name tradenark.com.ua www.tradenark.com.ua;
	return 301 https://tradenark.com.ua$request_uri;
	}

server	{
	listen 443;
	server_name www.tradenark.com.ua;
	return 301 https://tradenark.com.ua$request_uri;
	}

server	{
	listen 443 ssl default;
	server_name tradenark.com.ua;
	index index.php;
        ...
        }

Немного подробнее о настройке SSL в NGinx можно посмотреть тут
И снова проверим правильно ли работает переадресация
1) www http версия

# curl -I http://www.tradenark.com.ua
HTTP/1.1 301 Moved Permanently
Server: nginx/1.10.2
Date: Sun, 04 Dec 2016 14:09:47 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Location: https://tradenark.com.ua/

2) без-www http версия

# curl -I https://tradenark.com.ua
HTTP/1.1 301 Moved Permanently
Server: nginx/1.10.2
Date: Sun, 04 Dec 2016 14:11:04 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Location: https://tradenark.com.ua/

3) www https версия

# curl -Ik https://www.tradenark.com.ua
HTTP/1.1 301 Moved Permanently
Server: nginx/1.10.2
Date: Sun, 04 Dec 2016 14:11:41 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Location: https://tradenark.com.ua/

Данная простая конфигурация позволит избежать дублей страниц и немного повысит рейтинг вашего сайта в «глазах» поисковиков.
Удачи!

NGinx. www на non-www переадресация. Склейка доменов. 301 редирект: 3 комментария

  1. Роман Лавриненко

    Комент на комент. лучше не указывать протокол
    return 301 $scheme://joinup.ua$request_uri; — работает как с HTTP так и HTTPS
    и тогда не нужно будет лишнее писать.

    )))

  2. Даниил Черненко

    не понял, каким образом поможет $scheme ???
    Всё ровно два блока server писать, только с другой логикой.

    …Я имею в виду склейку всего в https без www

Добавить комментарий