Re: два правила работают по отделности но не вместе

VovansystemS vovansystems at gmail.com
Fri Jan 11 08:39:36 UTC 2013


>VovansystemS в предложенном вами варианте насколко я понимаю в просто
> отрезаете www это не покатит!
>Сайт проиндексирвоанный с ним нельзя изменить он и должен быть всегда с ним
я предлагаю делать перенаправление с www.site.ru/blabla.html на
site.ru/blabla.html всегда. Для поисковой оптимизации важно на самом
деле определиться с тем, будут ли все Ваши с www. или без оного и от
этого создавать конфигурационные файлы. Кстати, тот же Яндекс
позволяет легко подведить права на домен с www. и на домен без www. и
"склеить" их как один сайт, указав ему какой вариант имени является
глявным. В вебмастере гугла есть подобные иснтрументы. Поэтому я
всё-таки рекоммендую принять (если это возможно) один стандарт
относительно названия сайта и следовать ему.

>   if ($host ~* ^(www\.)(.+)) {
>      set $HBW $2;
>        root   /var/www/$HBW/web;
> }
в nginx есть замечательная возможность давать выделениям имена
(примеры тут http://nginx.org/ru/docs/http/ngx_http_core_module.html#server_name)
поэтому то, что написано выше можно переписать проще:
if ($host ~* ^(?:www\.)(?<HBW>.+)) {
     root   /var/www/$HBW/web;
 }
?<HBW> - создаёт переменную $HBW
?: - указывает, что содержимое выделения не следует сохранять в $1.
(хотя на самом деле там вообще можно не создавать выделения просто
убрав скобки - раз оно нигде не используется)

теперь непосредственно сам вопрос:
создайте отдельный сервер для обработки всех доменов с www.

server {
   server_name ~^www\.(?<SERVERNAME>.+)$;
   return 301 $scheme://$servername$request_uri$is_args$args;
}

а дальше оставьте сущетвующую конфигурацию без if-блока. Если домен
содежит www. вначале, то nginx сработает вышеуказанный сервер, а если
не содержит, то сервер по-умолчанию.

это, на мой взгляд, правильный ибо унифицированный подход.если все
сайты должны быть с www., тогда просто поменяйте содежимое блоков
(кроме server-name) местами. тогда все сайты без www. будут
перенаправлятся на домен с www.

Если же Вы всё-таки имеете дело с сайтами, унифицировать которые не
представляется возможным (каждый сам себе вебместер), тогда я бы
создал сервер, где в server_name разбирается на части и использовал
уже их в конфиге далее. К сожалению, сходу не могу написать такой
regexp, который будет выделять имя сайта в одну переменную, а поддомен
www. (при его наличии) в другую.


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