nginx rewriteモジュールルール

1206 ワード

大きな流れは:
まずserver{}からrewrite表現を探します。もしあれば、解析します。
そして書き換えた後のurlはマッチするlocation{}段を探します。
もしrewriteがlocation{}の中にあるなら、urlは書き直した後、またマッチングのlocationを探し続けます。ここでは「死循環」に注意してください。書き直したurlがこのlocationに適合しているなら、10回後に終了し、500のエラーに戻ります。
構文ルール:
rewrite レゲックス replace ment [フラグ]
レゲックスは現在のurlに対する正則マッチングであり、順方向マッチングのみをサポートしているようで、マッチングを排除することはサポートされていません。
replaccementはリダイレクトされたurlです。
この中にflagsパラメータは4つあります。
1.last 該当するlocationドメインに引き続きマッチします。不適切な配置はデッドサイクルを引き起こします。
2.break後のlocationではもう一致しません。つまり使い捨ての書き換えです。使い捨てのリダイレクトには、これを使うことを勧めます。
3.redirect 302をリダイレクトし、repacementはhttp:/またはhttps:/先頭をしてはいけません。
4.permant外部301はリダイレクトし、urlはジャンプする。
例:
http://example.com/1?g=2
rewirte (.*) /a/$1 break;
結果はhttp://example.com/a/1?g=2
いらないならg=2パラメータは、replacmentの後ろに疑問符をつけます。
rewirte (.*) /a/$1? break;
結果として 
http://example.com/a/1
wwwを持たないリダイレクトはwwwになります。一番標準的なやり方は以下の通りです。
server{

listen 80;

server_name example.com;

rewrite (.*) http://www.example.com$1 break;

}

server{

listen 80;

server_name www.example.com
...
}