web-dev-qa-db-ja.com

nginxはすべてのワイルドカードサブドメインをwww.site.comに書き換えます

Nginxを使用して、example.comのすべてのサブドメインをwww.example.comにリダイレクトしたいと思います。

Www以外をwwwに、またはその逆にリダイレクトするためのリダイレクトをここで見ましたが、www2.site.com blabla.site.comもリダイレクトしたいと思います。ドメインのワイルドカードDNSがあります。

Apacheの場合、これは次の方法で簡単に実行できます。

RewriteCond %{HTTP_Host} !www.example.com [NC]
RewriteRule (.*) http://www.example.com%{REQUEST_URI} [R=301,L]

以下は機能しているようですが、 ifisevil page によるとお勧めできません。

if ($http_Host !~ "www.site.com"){
    rewrite ^(.*)$ http://www.example.com$request_uri redirect;
}
13
user2143308

Nginxでこれを行う最良の方法は、2つのサーバーブロックを組み合わせることです。

server {
  server_name *.example.org;
  return 301 $scheme://example.org$request_uri;
}

server {
  server_name www.example.org;

  #add in further directives to serve your content
}

あなたがそれが機能していないと報告したので、私は私のラップトップでこれをテストしました。ローカルで次の結果が得られます(www2.test.localhostwww.test.localhostをnginxconfigビットと一緒に/etc/hostsに追加し、nginxをリロードした後):

$ curl --head www2.test.localhost
HTTP/1.1 301 Moved Permanently
Server: nginx/1.2.6
Date: Thu, 07 Mar 2013 12:29:32 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://www.test.localhost/

そうです、これは間違いなく機能します。

21
cobaco
server {
    server_name .example.com;
    return 301 http://www.example.com$request_uri;
}

server {
    server_name www.example.com;
    [...]
}

参照:

13
VBart