Nginxにリダイレクト処理を書くことは多々あるかと思います。Nginxはお手軽にconfファイルにリダイレクト処理を書くだけでとてもかんたんです。
例えば、https://onodera.com へのアクセスをすべてhttps://hogehoge.comにリダイレクトしたい場合はconfファイルに
rewrite ^/(.*) https://hogehoge.com/ redirect;
と書けばいいだけです。
シンプルなリダイレクトだと設定もシンプルなのですが、条件付きだとけっこう書き方がややこしかったりします。
実際に「このディレクトリ配下はリダイレクトせず、そのまま表示したい」みたいなことがありました。
具体的には、「onodera.comの/newsと/blogsはリダイレクトさせず、それ以外はhogehoge.com にリダイレクトしたい」
というような内容です。
まずこう書けば行けるかなと思ったのですが、
if ($request_uri !~ ^/news && $request_uri !~ ^/blogs){
rewrite ^/(.*) https://hogehoge.com/ redirect;
}
だめだった。
理由はこちら。
複数条件を書くのができないみたいです。
なので突貫工事的ではありますが、以下のような書き方をしました。
変数を使う方法。
set $flg 1;
if ($request_uri ~ ^/news) {
set $flg 0;
}
if ($request_uri ~ ^/blogs) {
set $flg 0;
}
if ($flg = 1) {
rewrite ^/(.*) https://hogehoge.com/ redirect;
}
$flgの値に応じてリダイレクトするかしないかを判断させてます。
おわり。
質問あればtwitter経由で連絡ください。