質問: 現在、複数のサービスを運用しておりまして、どのサービスもサブドメインありのページになっております。 しかし、少数ではありますが、サブドメインなしのURLにアクセスするユーザーがおります。 そういうユーザーにはwwwのサブドメインをつけて、リダイレクトするようにしたいのですが、 そういった設定をnginxで出来ますでしょうか? リダイレクト自体はこのような設定でできるのかと思われますが、 現在リクエストしたURLにサブドメインがついているか否かの判定をして、ついてなければ、といった条件分岐を記述する コードがわかりませんでした。 ``` server { listen 80; server_name example.com; rewrite ^(.*)$ http://www.example.com$1 permanent; } ``` 仮に `sub.example.com` というURLにアクセスした場合は、wwwに変えずに、そのまま、アクセスしてほしく、 `example.com` というURLにアクセスした場合は www.example.com にリダイレクトさせてほしいです。 宜しくお願いします。
回答: こうすればできると思います。 ``` server { listen 80 default_server; server_name example.com; return 301 http://www.example.com$request_uri; } server { listen 80; server_name www.example.com ""; ... } server { listen 80; server_name sub.example.com; ... } ``` なお、この設定では`example.com`のサーバに`default_server`が指定してありますから、上記設定の3つのホスト名以外のホスト名でアクセスしてきた場合は、すべて最初のサーバが使われます (www.example.comにリダイレクトされます)。ですのでこの場合、`example.com`を明示せずに「`_`」などを指定しても同じです。 また、`www.example.com`のサーバで「`""`」が指定してあるのは、Hostヘッダフィールドを持たない古い (HTTP/1.0以前の) リクエストに対応するためです。 詳細は、下記のnginxのマニュアルを見て下さい。 参照 === * nginx documentation: Server names