четверг, 17 марта 2016 г.

Проверка нескольких условий if в nginx

Имеется вот такой виртуальный хост:
server {
   server_name site.ru m.site.ru www.site.ru www.m.ste.ru;
...
}

Нужно сделать редирект http->https только для site.ru и для www.site.ru, но не для m.site.ru и www.m.site.ru:
set $flag 0;
if ($host = site.ru) {
   set $flag A;
}
if ($host != m.site.ru) {
   set $flag "${flag}B";
}
if ($scheme = http) {
   set $flag "${flag}C";
}
if ($flag = ABC) {
   return 301 https://$server_name$request_uri;
}

В .htaccess у меня прописан редирект с www на non-www:
RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.m.site.ru$ [NC]
RewriteRule ^(.*)$ http://m.site.ru/$1 [R=301,L]

Проверка:
$ curl -I http://site.ru --silent | grep Loca
Location: https://site.ru/
$ curl -I http://www.site.ru --silent | grep Loca
Location: http://site.ru/
$ curl -I http://www.m.site.ru --silent | grep Loca
Location: http://m.site.ru/
$ curl -I http://m.site.ru --silent | grep Loca

Комментариев нет: