[nginx] 下層ディレクトリへ rewrite させる時のリダイレクトループを防ぐ記法


こんばんは、相変わらずの小ネタ王、ぬるぽぽぽです。あるディレクトリに来たリクエストを別のディレクトリへリダイレクトさせたい、という要求はどこにでもある話ですが、例えば /obihiro にきたリクエストを /sapporo へ飛ばす分にはループを心配しなくてよいでしょう。

location ~ /obihiro/ {
  rewrite  ^/obihiro/(.*)$ http://example.com/sapporo/$1 break;
}

こんな感じですね。

しかし、 /tokyo/shinagawa へ来たリクエストを /tokyo/shinagawa/togoshi/ginza へ飛ばしたい、といった場合、下層ディレクトリへのリダイレクトなので、ループしてしまうと悩んでいたところ、上司に助けていただいたのでメモ。



# location ~ /tokyo/shinagawa/ とセットで.
location ^~ /tokyo/shinagawa/togoshi/ginza/ {
  break;
}

location ~ /tokyo/shinagawa/ {
  rewrite /tokyo/shinagawa/(.*)$ http://example.com/tokyo/shinagawa/togoshi/ginza/$1 break;
}

このように、 /tokyo/shinagawa/togoshi/ginza でループを止めてやる記述とセットにすれば解決。わーい。

[amazonjs asin="4774178667" locale="JP" title="nginx実践入門 (WEB+DB PRESS plus)"]