NGINXを使用して別のドメインにリダイレクトする方法は?


136

NGINX を使用するようにmydomain.com、どのサブドメインをリダイレクトできますか?*.mydomain.comwww.adifferentdomain.com

回答:


276

server_nameは、.mydomain.com構文を使用してサフィックスの一致をサポートします。

server {
  server_name .mydomain.com;
  rewrite ^ http://www.adifferentdomain.com$request_uri? permanent;
}

またはバージョン0.9.1以降:

server {
  server_name .mydomain.com;
  return 301 http://www.adifferentdomain.com$request_uri;
}

1
待機するためにポートを配置する必要はありませんか?たとえば、80をリッスンします。プライマリドメインにリダイレクトする必要のある複数のドメインがありますが、サーバーには他のさまざまなドメイン用の複数の仮想サーバーもあります。
Ryan

1
@Ryan listen指定しない場合、ディレクティブのデフォルトはポート80です。実際には、一般的なものよりも少し複雑です。詳細については、nginx構成ドキュメントをご覧ください。
Yitz

2
何をしない?終わりで達成しますか?
Dan Dascalescu 2014

5
違いは何だrewriteとはreturn 301 $scheme://www.adifferentdomain.com$request_uri;
Dan Dascalescu 14

6
?書き換えの最後にnginxに元のクエリ文字列を追加しないように指示します。$request_uriクエリ文字列が既にあるため、再度追加する必要はありません。return 301構文は新しいものであり、2つの方法の間の挙動に差があってはならないが、私はもともとこの質問に答えたときに、私はより安全な構文と一緒に行ったので、多くのディストリビューションには、必要なバージョンを持っていませんでした。
kolbyjack 14


15

可能であれば、なぜrewriteモジュールを使用するのreturnですか?技術的に言えば、ここで読むことできるreturnようにrewriteモジュールの一部ですが、このスニペットはimhoを読む方が簡単です。

server {
    server_name  .domain.com;

    return 302 $scheme://forwarded-domain.com;
}

また、301リダイレクトを指定することもできます。


1
これはパスとクエリパラメータも保持しますか?
mpen-2014

3
いいえ、この例では@Markを実行しません。しかし、私はあなたが以前の答えを混ぜ合わせて次のようなものを思いつくことができると思います:return 302 $scheme://forwarded-domain.com$request_uri;
ロビン・ファン・バーレン

余談ですが、多くの場合、スキームを保持する代わりにhttpsにリダイレクトする必要があります(つまり、$ schemeの代わりにhttpsを使用します)。-これは、プロトコル相対リンクが廃止と考えられているのと同じ理由のためである paulirish.com/2010/the-protocol-relative-url
mahemoff

@mahemoffそれは完全に真実ではありません。SSLを放電するロードバランサーの背後にWebサーバーがある場合を考えてみます。
セバスチャンネイラ2016

11

これはHTTPRewriteModuleを介して機能するはずです。

www.example.comからexample.comに書き換える例:

server {    
    server_name www.example.com;    
    rewrite ^ http://example.com$request_uri? permanent; 
}

これは、www.example.comをexample.comにリダイレクトするだけです。両方を別のドメインにリダイレクトしたい。1つのルールでそれを行うことはできますか?
debの

確かではありませんが、server_name mydomain.comだと思います。www.adifferentdomain.comを永続的に書き換えます。}それを行う必要がありますか?* .mydomain.comをすべて使用する必要がありますか?
ウド

@debあなたはただ持っているでしょうserver_name example.com www.example.com;
シトラスピ

この質問では特に、サブドメイン別のドメインにリダイレクトされるように求めています。この答えは、2つのいずれにも(明示的に)答えることはできません。
Kissaki 2014

これには重要な301がありません。
Sliq

9

「domain1.com」のリクエストを「domain2.com」にリダイレクトする場合は、次のようなサーバーブロックを作成できます。

server {
    listen 80;
    server_name domain1.com;
    return 301 $scheme://domain2.com$request_uri;
}

誰かがhttps://リクエストもリダイレクトする必要があるかもしれません。 listen 443;
Rafik Farhad

0

一時的なリダイレクト

rewrite ^ http://www.RedirectToThisDomain.com$request_uri? redirect;

永続的なリダイレクト

rewrite ^ http://www.RedirectToThisDomain.com$request_uri? permanent;

特定のサイトのnginx設定ファイルで:

server {    
    server_name www.example.com;
    rewrite ^ http://www.RedictToThisDomain.com$request_uri? redirect;

}

0

サーバー{}ブロック内にif条件を記述するだけです。

server { 

    if ($host = mydomain.com) {
        return 301 http://www.adifferentdomain.com;
    } 
}

Nginx(nginx.com/resources/wiki/start/topics/depth/ifisevil)で'if'ステートメントを使用する場合は注意が必要です。この場合、代わりに「server_name mydomain.com」を使用できます。
マーティ

ロケーションコンテキストで使用した場合に悪である場合、リダイレクトホストの指定に使用すると安全です
cryptoKTM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.