OPは例を優先しました。また、@ minaevが書いたことは、物語の一部にすぎませんでした!だから、ここに行く...
例1:フラグなし(中断または最後)
server {
server_name example.com;
root 'path/to/somewhere';
location / {
echo 'finally matched location /';
}
location /notes {
echo 'finally matched location /notes';
}
location /documents {
echo 'finally matched location /documents';
}
rewrite ^/([^/]+.txt)$ /notes/$1;
rewrite ^/notes/([^/]+.txt)$ /documents/$1;
}
結果:
# curl example.com/test.txt
finally matched location /documents
説明:
の場合rewrite
、フラグはオプションです!
例2:外部ロケーションブロック(ブレークまたは最後)
server {
server_name example.com;
root 'path/to/somewhere';
location / {
echo 'finally matched location /';
}
location /notes {
echo 'finally matched location /notes';
}
location /documents {
echo 'finally matched location /documents';
}
rewrite ^/([^/]+.txt)$ /notes/$1 break; # or last
rewrite ^/notes/([^/]+.txt)$ /documents/$1; # this is not parsed
}
結果:
# curl example.com/test.txt
finally matched location /notes
説明:
場所のブロック、両方の外側break
とlast
正確な方法で振る舞います...
- 書き換え条件の解析はこれ以上ありません
- Nginx内部エンジンは次のフェーズに進みます(
location
一致の検索)
例3:ロケーションブロックの内部-「ブレーク」
server {
server_name example.com;
root 'path/to/somewhere';
location / {
echo 'finally matched location /';
rewrite ^/([^/]+.txt)$ /notes/$1 break;
rewrite ^/notes/([^/]+.txt)$ /documents/$1; # this is not parsed
}
location /notes {
echo 'finally matched location /notes';
}
location /documents {
echo 'finally matched location /documents';
}
}
結果:
# curl example.com/test.txt
finally matched location /
説明:
ロケーションブロック内で、break
flagは次のことを行います...
- 書き換え条件の解析はこれ以上ありません
- Nginx内部エンジンは現在の
location
ブロックを解析し続けます
例4:内部ロケーションブロック-「最後」
server {
server_name example.com;
root 'path/to/somewhere';
location / {
echo 'finally matched location /';
rewrite ^/([^/]+.txt)$ /notes/$1 last;
rewrite ^/notes/([^/]+.txt)$ /documents/$1; # this is not parsed
}
location /notes {
echo 'finally matched location /notes';
rewrite ^/notes/([^/]+.txt)$ /documents/$1; # this is not parsed, either!
}
location /documents {
echo 'finally matched location /documents';
}
}
結果:
# curl example.com/test.txt
finally matched location /notes
説明:
ロケーションブロック内で、last
flagは次のことを行います...
- 書き換え条件の解析はこれ以上ありません
- Nginx内部エンジンは、結果の結果に基づいて別の場所の一致を探し始めます
rewrite
。
- 次の場所が一致した場合でも、書き換え条件の解析は不要です!
概要:
- ときに
rewrite
フラグを条件break
やlast
マッチは、nginxのは、それ以上の解析を停止しますrewrites
!
- ロケーションブロックの外側で、
break
またはを使用してlast
、Nginxは同じジョブを実行します(書き換え条件の処理を停止します)。
- ロケーションブロック内で
break
、Nginxは書き換え条件の処理のみを停止します
- ロケーションブロック内で
last
、Nginxは書き換え条件の処理を停止し、ブロックの新しい一致を探し始めlocation
ます!Nginx rewrites
は新しいlocation
ブロック内のすべても無視します!
最終ノート:
いくつかのエッジケース(実際には、書き換えなどの一般的な問題)を含めることができません500 internal error
でした。しかし、それはこの質問の範囲外です。おそらく、例1も範囲外です!