2017-02-03 4 views
2

Как я могу перенаправить с www на non www для этого правила ~^(? \ W +). Example.com?nginx www перенаправить на не-www с субдоменом

server { 
    listen 80; 
    listen [::]:80 ipv6only=on; 
    server_name ~^(?<subdomain>\w+)\.example\.com$; 
} 

Я пробую отдельный перенаправление основного домена и перенаправление всех поддоменов, но имеет рекурсивное перенаправление для основного домена.

server { 
    server_name www.example.com; 
    return 301 $scheme://example.com$request_uri; 
} 

server { 
    server_name "~^www\.(.*)$" ; 
    return 301 $scheme://$1$request_uri ; 
} 

Тогда я только попробовать

server { 
    server_name "~^www\.(.*)$" ; 
    return 301 $scheme://$1$request_uri ; 
} 

и что работа для поддоменов. Но в основном домене у меня есть перенаправление для $ request_uri без домена.

ответ

0

Следует помнить, что если nginx не может найти подходящий server_name, он будет использовать сервер по умолчанию. И если вы не определите default_server, он будет использовать первый блок server, прослушивающий соответствующий порт. См. this document.

Очевидно, что example.com не соответствует регулярному выражению ~^(?<subdomain>\w+)\.example\.com$, однако текущий текущий блок server работает, потому что это неявный сервер по умолчанию.

Регулярное выражение server блоки оцениваются в порядке, поэтому сначала установите правило www., так что www.example.com не рассматривается как поддомен.

Сделать основной server блоком по умолчанию явно, чтобы он продолжал обрабатывать example.com.

server { 
    server_name "~^www\.(.*)$" ; 
    return 301 $scheme://$1$request_uri ; 
} 
server { 
    listen 80 default_server; 
    listen [::]:80 default_server ipv6only=on; 
    server_name ~^(?<subdomain>\w+)\.example\.com$; 
    ... 
} 
+0

работает отлично. Спасибо большое –