Как известно для поисковых систем сайты расположенные на именах 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/
Данная простая конфигурация позволит избежать дублей страниц и немного повысит рейтинг вашего сайта в «глазах» поисковиков.
Удачи!
Комент на комент. лучше не указывать протокол
return 301 $scheme://joinup.ua$request_uri; — работает как с HTTP так и HTTPS
и тогда не нужно будет лишнее писать.
)))
Благодарю, Роман. Возьму на вооружение
не понял, каким образом поможет $scheme ???
Всё ровно два блока server писать, только с другой логикой.
…Я имею в виду склейку всего в https без www