Redirect 301 nginx: Как сделать 301 редирект в Nginx?

Как правильно выполнить Nginx redirect 301 для SEO

Опубликовано admin — пн, 03/28/2022 — 13:58

Система

По написанию конфигурационного файла Nginx с redirect 301 существует много рекомендаций. Как создать правильный редирект, который не плодит дубли, ухулшающие SEO.

Содержание

  • Что такое Nginx redirect 301
  • Nginx redirect 301 с www на без www и с http на https
  • Заключение

Что такое Nginx redirect 301

Nnginx 301 redirect является формой перенаправления HTTP. Это очень полезный способ правильного перенаправления адресов в браузере клиента. Можно использовать перенаправление HTTP, чтобы перенаправить один домен или адрес на другой домен или адрес. Существует несколько типов перенаправлений, каждый из которых имеет разное значение в клиентском браузере.

Владельцам веб-сайтов обычно необходимо делать это перенаправление при смене доменов или переупорядочении контента на своем веб-сайте. Такие перенаправления нужны, если ваш контент был постоянно перемещен на новое место, например, когда вы меняете доменные имена или серверы.

Nginx redirect 301 с www на без www и с http на https

Если вам нужно создать Nginx redirect, вы можете выбрать один из нескольких вариантов. Самый простой и быстрый способ выполнения перенаправления — использование оператора return

Для выполнения перенаправления по этому варианту следует поместить в свой конфигурационный файл Nginx следующий код:

return 301 https://example.com$request_uri;

Это перенаправление является постоянным (Redirect 301) и идеально подходит для постоянной миграции контента после смены домена. 

Фрагмент блока конфигурационного файла выглядит так:

server {
    server_name example.com www.example.com;
    listen 80;
    listen [::]:80;
    return 301 https://$host$request_uri;
}
...

Причина замены example.com на $host будет понятна из следующего фрагмента.

В центре сертификации Let’s Encrypt можно легко получить и установить SSL/TLS сертификат совершенно бесплатно. Это позволит использовать на веб-сайте шифрованный трафик HTTPS.  Получив сертификат следует правильно настроить редирект.

Фрагмент блока конфигурационного файла после этого будет выглядеть вот так:

...
if ($host = www.example.com) {
    return 301 https://example.com$request_uri;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    
...

Заключение

Я проверил множество вариантов redirect 301 на сервере с установленными Nginx и php-fpm. Ряд предлагаемых конфигураций слишком усложнены. Лишние переадресации нецелесообразны, а некоторые из них приводят к циклическому перенаправлению. Другие же приводят к дублированию адреса, ухудшая SEO.

Представленный здесь вариант я считаю оптимальным и пользуюсь им достаточно давно.

Поделиться с друзьями

Redirect 301 с веб-ресурса «www» на сайт без учета «www» и обратно

Очень часто появляется необходимость в использовании редиректов. К наиболее распространенным ситуациям, в которых задействуется 301 Redirect можно отнести:  

  • случаи, когда страница сменила адрес, а пользователи осуществляют запрос на старую;
  • исключение дублей страниц;
  • переезд с одного сайта на другой со сменой доменного имени. 

    Самым верным решением в подобных ситуациях будет реализация редиректа во фронтэнде, посредством NGINX. В идеале рекомендуется отказаться от Appache и использования .htaccess в принципе, если есть желание существенно ускорить работу сайта в целом.

    Однако в таком случае, при переходе на NGINX, мы сразу же сталкиваемся с проблемой реализации ранее создававшихся . http://www.site.com$requеst_uri ? pеrmanent;

    }

    sеrver {

    listen 80;

    sеrver_nаme www.sitе.com;

    . . .

    Редирект со включенным режимом ЧПУ

    Это очень популярный способ, поскольку, смена адресов страниц происходит и в работающих проектах, а это чревато потерей определенного количества посетителей сайта. В поисковых системах все еще красуется старое приветствие, на веб-сайте – новое, что вводит пользователя в замешательство.

    Этот способ перенаправления можно отнести к разряду непростых, поскольку здесь условие содержится в переменных запроса GET. Не совсем понятно, каким образом создавать Location по такому запросу

    /dir/?ELЕMENT_ID=777 на /dir/777/.

    Есть достаточно эффективный, хотя и не самый удобный, вариант, поскольку присутствие условия «if» в конфигурации NGINX считается не самым удачным решением априори. /cat/page/$ http://www.example.net/page2/ permanent;

    Перенаправление 301 с передачей переменной /оbl/777/ на /оbl.php?obl_idx=777 по условию

    lоcation /obl/ { rеwrite /оbl\/(.*)$ /оbl.php?obl_idx=$1; }

    Вас также может заинтересовать:

    • Передача почты между Exchange и Mdaemon
    • Аренда Windows сервера – почему такая услуга популярна сегодня?
    • Невероятно выгодная Аренда сервера VDS на UNIX сегодня доступна и Вам!
    • Облачный хостинг или новая реальность
    • О новых возможностях exchange server 2013

    Возврат к списку

    Nginx: что вызывает перенаправление 301?

    Задавать вопрос

    спросил

    Изменено 3 года, 8 месяцев назад

    Просмотрено 3к раз

    Я до сих пор не знаю, почему моя веб-страница показывает

     myapp.
    com перенаправлял вас слишком много раз.

    Nginx используется только в качестве прокси для моего приложения каналов django, которое работает с daphne.

    Nginx работает без ошибок.

     myapp systemd[1]: запуск высокопроизводительного веб-сервера и обратного прокси-сервера...
     

    Дафна работает на 127.0.0.1:8001

     curl -I http://myapp.com/
    завиток-я https://myapp.com/
     

    возвращает

     HTTP/1.1 301 Перемещено навсегда
    Сервер: nginx
    Дата: вторник, 05 марта 2019 г.11:53:39 по Гринвичу
    Тип содержимого: текст/html
    Длина контента: 178
    Соединение: Keep-alive
    Адрес: https://myapp.com/
    HTTP/1.1 301 перемещен навсегда
    Сервер: nginx/1.10.3 (Ubuntu)
    Дата: вторник, 05 марта 2019 г., 11:54:43 по Гринвичу
    Тип содержимого: текст/html
    Длина контента: 194
    Адрес: https://myapp.com/
    Соединение: Keep-alive
     

    Кто-нибудь знает, что вызывает эту ошибку 301?

    Конфигурационный файл Nginx

     сервер {
    слушать 80;
    имя сервера myapp.com www. myapp.com;
    серверные токены отключены;
    вернуть 301 https://$servername$requesturi;
    }
    сервер {
    слушать 443 ssl; # под управлением Certbot
    имя_сервера myapp.com www.myapp.com;
    ssl_certificate /etc/letsencrypt/live/myapp.com/fullchain.pem; # под управлением Certbot
    ssl_certificate_key /etc/letsencrypt/live/myapp.com/privkey.pem; # под управлением Certbot
    включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # под управлением Certbot
    корень /home/me/myapp/src/myapp;
    location = /favicon.ico { access_log off; log_not_found выключен; }
    местоположение /статическое/ {
        корень /home/me/myapp/src/myapp;
    }
    местоположение /медиа/ {
        корень /home/me/myapp/src/myapp;
    }
    расположение / {
        try_files $uri/ @python_django;
    }
    местоположение @python_django {
        прокси_пароль http://127.0.0.1:8001;
        proxy_pass_request_headers включен;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Хост $http_host;
        proxy_set_header X-Forwarded-Proto $ схема;
        прокси_перенаправление выключено;
    }
    }
     
    • nginx
    • перенаправление
    • http-status-code-301
    • daphne

    Я до сих пор не знаю, как это исправить полностью, но когда я убираю

    , возвращаю $server_name 301 https:// запрос_ури;
     

    и запустить curl -I -L http://www. myapp.com/ я получаю

     HTTP/1.1 200 ОК
    Сервер: nginx
    Дата: вторник, 05 марта 2019 г., 13:33:42 по Гринвичу
    Тип содержимого: текст/html
    Длина содержимого: 612
    Последнее изменение: Вт, 31 января 2017 г., 15:01:11 GMT
    Соединение: Keep-alive
    ETag: "5890a6b7-264"
    Допустимые диапазоны: байты
     

    Но я не могу получить доступ к странице, потому что, очевидно, LetsEncrypt перенаправляет все http на https , поэтому я возвращаюсь на страницу с ошибкой 301!

    Зарегистрируйтесь или войдите в систему

    Зарегистрируйтесь с помощью Google

    Зарегистрироваться через Facebook

    Зарегистрируйтесь, используя адрес электронной почты и пароль

    Опубликовать как гость

    Электронная почта

    Требуется, но никогда не отображается

    Опубликовать как гость

    Электронная почта

    Требуется, но не отображается

    nginx — Как установить 301 перенаправление нескольких URL-адресов в один URL-адрес?

    Задавать вопрос

    спросил

    Изменено 1 год, 9 месяцев назад

    Просмотрено 390 раз

    Файл vhost на нашем сервере NGINX обрабатывает переадресацию 301.

    Наша текущая настройка заключается в том, что мы перенаправляем список URL-адресов на соответствующий URL-адрес

    Например (страницы объектов на страницы утилит):

     location /facility/main-1 {
        вернуть 301 https://$host/utility/main-1/;
    }
    расположение / объект / main-2 {
        вернуть 301 https://$host/utility/main-2/;
    }
     

    Но наш веб-сайт запускает новую страницу с подстраницами под названием /services

    Наша цель — перенаправить обе страницы под /facility и страницы под /utility от до /services

    Есть ли такая конфигурация, как та, что я сделал ниже?

     расположение /объект/основной-1, /утилита/основной-1/{
        вернуть 301 https://$host/services/main-1/;
    }
    расположение / объект / main-2, / утилита / main-2 / {
        вернуть 301 https://$host/services/main-2/;
    }
     

    Любая помощь приветствуется. Спасибо

    • nginx
    • перенаправление

    1

     расположение ~* ^/(средство|полезность)/main-1/{
        вернуть 301 https://$host/services/main-1/;
    }
     

    В разделе «Ваш виртуальный хост» сделайте следующую запись для apache/httpd.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *