понедельник, 16 мая 2011 г.

Глобальный 301 редирект на/с "www." версию домена в nginx

Для чего если можно просто указать все версии домена в server_name? Чтоб не слетали куки. А то авторизованный на example.com человек оказывается не авторизован на www.example.com куда его привела скажем ссылка из уведомления о новом ответе на форуме. Это очень раздражает.

Подчтеннейшая публика! Предлагаю Вам вариант универсального редиректа на все виртуальные серваки управляемые целевым nginx'ом.

В общем для мазохистов-любителей длинных имён и прочих эмо есть вариант редиректа с без "www" на "www":

server {
  server_name ~^(?!www\.);
  rewrite ^ http://www.$host$request_uri permanent;
}

да, почему-то принято упоминать, что автор решения Игорь Сысоев.

Для прочих же, кто не стремится нажимать лишние клавиши преобразование из "www" в без "www"

server {
  server_name ~^(?=www\.);
  if ( $host ~* "www.(.*)"){
    set $unwww $1;
  }
  rewrite ^ $scheme://$unwww$request_uri permanent;
}

Автор решения Ваш покорный слуга :)

ВНИМАНИЕ! Всё это дело вставляется в начало блока http файла nginx.conf и не забываем убирать в конфах виртуальных серваков из server_name вариант с/без "www" (убираем то, с чего редиректим), а то не сработает!

4 комментария:

  1. прикольнай совет, браза

    смотрю в ленту в шоке: и когда я такое успел написать??))

    ОтветитьУдалить
  2. Спасибо! Именно то, что искал. Кратко и в точку!

    ОтветитьУдалить
  3. Что за бред? Хоть бы nginx.org почитали.

    ОтветитьУдалить
  4. KING CASINO, LLC GIVES A $100 FREE BET
    KING CASINO, LLC GIVES A $100 FREE BET หาเงินออนไลน์ to try. Visit us today 토토 and receive a $100 FREE BET! herzamanindir.com/ Sign up at our septcasino.com new 토토 사이트 site!

    ОтветитьУдалить