2013-03-07 27 views
11

nginxを使用して、example.comのすべてのサブドメインをwww.example.comにリダイレクトします。nginxはすべてのワイルドカードサブドメインをwww.site.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; 
} 

答えて

19

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のコンフィグビットと一緒に、私の/etc/hostswww2.test.localhostwww.test.localhostを追加し、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/ 

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

+2

してください、代わりにシンプルな 'return'のpermanent' ^書き換え'使用しないでください。正規表現(単純な '^'でも)を実行すると、この場合CPUが無駄になります。 – VBart

+0

良い点は、 – cobaco

+0

がこれを試してみました。それはうまくいきません.301ヘッダーを送信しません。それはwww.site.comにリダイレクトされません。実際にサーバーの別のサイトにリダイレクトされますが、leaver subdomain.site.com adressbar – user2143308

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

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

参考文献:

+0

はこれを試しました、それは働かない、301ヘッダーを送ったり、それはwww.site.comにリダイレクトされません実際にはサーバー上の別のサイトにリダイレクトしますが、addombarにsubdomain.site.comを残します – user2143308

+0

おそらく 'site.com'は' .site.com'(ドットではない)とマッチしないかもしれません。 – regilero

+2

私は* .site.comとsite.comの両方がマニュアルに従ってキャッチされた.site.comを試しました – user2143308

関連する問題