Re: 301 редирект для нескольких страниц сайта

Maxim Dounin mdounin at mdounin.ru
Wed Sep 19 09:08:48 UTC 2012


Hello!

On Wed, Sep 19, 2012 at 12:56:08AM -0400, anebilyca wrote:

> Приветствую!
> 
> Немного о пациенте. Стоит nginx/0.7.65. 

Just a side note: стоит обновится.

> Необходимо настроить 301 редирект с нескольких страниц сайта на подобные им,
> но более короткие.
> 
> Самый первый вопрос, это как точно называется файл, в котором необходимо это
> всё прописывать? Например, в апаче это .htacces. А здесь?

А здесь - просто пишем в конфиге.  Конфиг можно разбить на 
несколько файлов с помощью директивы include, но не обязательно (и 
обычно нежелательно, т.к. затрудняет чтение).

Note well: в linux'ах исторически сложилось, что вместо одного 
конфига nginx.conf по умолчанию используется множество отдельных 
файлов, включённых в nginx.conf с помощью директивы include.  
Такой подход более удобен для автоматического конфигурирования, но 
очень плох для начинающих.  Поэтому если сомневаетесь, где что 
писать - возможно имеет смысл на время отказаться от всех этих 
sites-available/sites-enabled, и писать конфигурацию полностью в 
nginx.conf.

> Ну и как я увидел, есть несколько вариантов реализации. Хотелось бы узнать у
> вас какой применим в моей ситуации и некоторые комментарии по вопросам,
> которые у меня возникли.
> 
> И так. 
> 
> 1. Способ.
> 
> Код:
> server {
>      listen  80;
>     server_name  www.host.ru/1-page;
>     rewrite ^ www.host.ru/2-page$request_uri? permanent; #301 redirect
> }

Это бессмысленная конструкция, в директиве server_name указывается 
имя сервера, а не конкретной страницы.  Подобные конструкции 
применяются для перенаправления всего сервера целиком (e.g. чтобы 
добавить/убрать "www."), но не годятся для перенаправления 
конкретных страниц.

http://nginx.org/r/server_name/ru

[...]

> 2. Способ.
> 
> Код:
> server {
> include redirect.conf;
> 
> 
> redirect.conf:
> 
> location = /1-page { return 301 http://host.ru/2-page; }
> location = /3-page { return 301 http://host.ru/4-page; }
> 
> }
> Можно ли употреблять такую структуру, если я буду редиректить на разные
> страницы, а не на главную, как я видел в одном примере?

Да, можно.  Правда, в 0.7.65 подобная конструкция работать не 
будет, "return 301 текст" работает начиная с 0.8.42.  Нужно либо 
обновиться, либо использовать

    location = /1-page {
        rewrite ^ http://host.ru/2-page permanent;
    }

Maxim Dounin



Подробная информация о списке рассылки nginx-ru