nginxのリダイレクトでは転送元のurlにクエリーが含まれる場合は、シンプルにリダイレクトすることはできない。
こういうURLがあるとしよう。
cat-marketing/blog_detail?=xxxx
例えば、こう書いてもリダイレクトは機能しない。
location = /cat-marketing/blog_detail?=xxxx {
return 301 https://$host$request_uri;
}
return 301 https://$host$request_uri;
}
ではどうすればいいかと言うと、以下のようにすればいい。これはクエリーが999の時にだけ別の記事に転送するという例だ。
set $keyword_name “”;
if ($args ~ “blog_detail=(.*)”) {
set $keyword_name $1;
}
if ($keyword_name = “999”) {
rewrite ^/blog_detail.*$ https://hogehoge/article_?=1500?;
break;
}
if ($args ~ “blog_detail=(.*)”) {
set $keyword_name $1;
}
if ($keyword_name = “999”) {
rewrite ^/blog_detail.*$ https://hogehoge/article_?=1500?;
break;
}
少し解説をすると、まず適当な変数を空の値で初期化する。値が999以外の時の処理を先に書き、999の時にだけ転送する処理を記述する。