2017-02-03 18 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ブロックが機能します。

正規表現serverブロックが順番に評価されるので、www.ルールを最初に配置し、www.example.comはサブドメインとして扱われません。

example.comを処理し続けるように、メインのserverブロックを明示的にデフォルトにします。

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

が完璧です。どうもありがとうございます –

関連する問題