クエリ文字列を保持しながらNginxワイルドカードサブドメインリダイレクト

クエリ文字列を保持しながらNginxワイルドカードサブドメインリダイレクト

たとえば、次にsub1.example.comリダイレクトしながらサブドメインをURLの末尾に追加している間、ワイルドカードサブドメインを新しいURLにリダイレクトしたいとします。www.newdomain.example/categories/sub1

server {
server_name ~^(.*)\.example\.com$ ;
return 301 $scheme://newdomain.example/categories/;
}

?Nginxは最後にブロックされないので、基本的にこれを追加すると思います。

答え1

または、次のような場合は悪を使用しないでください。

server {
  server_name ~^(.*)\.example\.com$;
  return 301 $scheme://www.newdomain.example/categories/$1$request_uri;
}

$ request_uriには既にクエリ文字列/パラメータが含まれています。次を参照してください。http://nginx.org/en/docs/http/ngx_http_core_module.html

$request_uriを使用したくない場合は、$ is_args $argsペアについても言及したいと思います。

  location = /from {
    return 301 /to$is_args$args;
  }

答え2

server_name例を見る公式文書:

server {
  server_name ~^(.*)\.example\.com$;
  if ($query_string) {
    return 301 $scheme://newdomain.example/categories/$1?$query_string;
  }
  return 301 $scheme://newdomain.example/categories/$1;
}

sub1.example.com は www.newdomain.example/categories/sub1 にリダイレクトされます。

www.newdomain.exampleそれともexample.comどちらが正しいですか?

答え3

http://cat.example.com/post/1?comments=trueにリダイレクトするには、http://example.com/categories/cat/post/1?comments=true次の設定を使用できます。

server {
    server_name ~^(.*)\.(example\.com)$;
    return 301 $scheme://$2/categories/$1$request_uri;
}

キャプチャグループで正規表現を使用します。server_name重複を避けるため。デフォルトでは、クエリ文字列は例では保持されませんが、提案された設定では次のように保持されます。$request_uri:

$request_uri
    full original request URI (with arguments) 

関連情報