nginx で非 www ドメインを置き換える際に問題が発生する

nginx で非 www ドメインを置き換える際に問題が発生する

CentOS 7 を Nginx で使用しています。www のないドメインをすべて「www」ドメインに変換したいです。たとえば、誰かが「abc.example.com」と入力すると、「www.example.com」にリダイレクトされるようにしたいです。これを試しました。

server {
  listen 80;
  server_name "~^(?!www\.).*";
  return 301 $scheme://www.$host$request_uri;
}

サイト固有の構成ファイルには、代わりに「abc.example.com」と入力すると「www.abc.example.com」にリダイレクトされるというエラーが発生します。「www」を先頭に追加するのではなく、「www」を置き換えるように上記を修正するにはどうすればよいでしょうか?

答え1

ドメインのみをホストしていてexample.com、すべてを にリダイレクトしたい場合はwww.example.com、正規表現サーバーではなくデフォルト サーバーを使用する必要があります。

例えば:

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

見るこのドキュメント多くのための。

関連情報