14

example.comnginx を使用して、 のすべてのサブドメインをにリダイレクトしたいと考えてい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 ページによると推奨されていません。

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

2 に答える 2

23

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
}

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

$ 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/

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

于 2013-03-07T10:20:57.920 に答える
13
server {
    server_name .example.com;
    return 301 http://www.example.com$request_uri;
}

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

参考文献:

于 2013-03-07T10:27:10.967 に答える