nginx:1つの場所を除くすべてを書き直す


11

現在、私のnginxはいくつかのドメインを、使用している1つのメインドメインに書き換えています。これが私の設定からの1つのルールです:

server {
  listen X.X.X.X:80;
  server_name .exampleblog.org;
  rewrite ^(.*) http://blog.example.org$1 permanent;
}

** exampleblog.org *へのすべてのリクエストは、blog.example.orgにリダイレクトされます

ここで、www.exampleblog.org / +およびexampleblog.org/+を使用して、ユーザーをGoogle Plusページにリダイレクトします。それはの異なるバージョンを試しました:

server {
  listen X.X.X.X:80;
  server_name .exampleblog.org;
  location /+ {
    rewrite ^ https://plus.google.com/12345678901234567890/ permanent;
  }
  rewrite ^(.*) http://blog.example.org$1 permanent;
}

上記および他のバージョンは単にblog.example.org/+にリダイレクトします -何が問題なのですか?

回答:


14

nginxのディレクティブは、構成ファイルに表示される順序で適用されるとは限りません。サーバーレベルの書き換えは、場所が選択される前に機能し、常に一致するため、すべてがリダイレクトされます。次のような2番目の場所が必要です。

server {
  listen x.x.x.x:80;
  server_name .exampleblog.org;

  # Match /+ requests exactly    
  location = /+ {
    # I prefer return 301 instead of rewrite ^ <target> permanent,
    # but you can use either
    return 301 http://plus.google.com/1234567890/;
  }

  # Match everything else
  location / {
    return 301 http://blog.example.org$request_uri;
  }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.