概要:サーバーの場所は非常に順次書き換えマッチングフロント複数ことと優先的に実行、それが上書きされる場合よりも規則的で、ブロックを書き換えることができます。
書き換えステージの、ではない試合で、出力段に抜け出します。前回同様の要求を再開始し、それは再試合をします。
nginxの公式コメントはこれです:
最後に 変更されたURIに一致する新しい位置の探索が続くngx_http_rewrite_moduleディレクティブの現在のセットの処理を停止します。 ブレークは ngx_http_rewrite_moduleディレクティブの現在のセットの処理を停止します。
我々はnginxのは、実装の10段階で実行されている知っている、ngx_http_rewrite_modeは、上述した前記1段-rewrite段階として理解することができます。
typedefを列挙{ NGX_HTTP_POST_READ_PHASE = 0、 NGX_HTTP_SERVER_REWRITE_PHASE、 NGX_HTTP_FIND_CONFIG_PHASE、 NGX_HTTP_REWRITE_PHASE、//書き換え阶段在这里 NGX_HTTP_POST_REWRITE_PHASE、 NGX_HTTP_PREACCESS_PHASE、 NGX_HTTP_ACCESS_PHASE、 NGX_HTTP_POST_ACCESS_PHASE、 NGX_HTTP_TRY_FILES_PHASE、 NGX_HTTP_CONTENT_PHASE、 NGX_HTTP_LOG_PHASE } ngx_http_phases。
:それでは、違いを理解し、最後を壊してみましょう
現在のリクエストを停止し、試合のルールを書き換えるための要求を再起動:最後。新しいリクエストと最初の段階からは...始まっ
BREAK:相対最後、休憩をし、ちょうど現在の書き換えのステージをスキップして、この要求のその後の実施段階、要求を再開始しません...
例で見てみましょう:
サーバー{ 80 DEFAULT_SERVERを聞きます。 SERVER_NAME dcshi.com; ルートWWW。 位置/休憩/ { リライト^ /ブレーク/(.*)/試験/ $ 1ブレーク。 エコー「ブレイクページ」。 } 場所/最後/ { リライト^ /最後/(.*)/試験/ $ 1ラスト。 エコー「最後のページ」。 } 場所/試験/ { エコー「テストページ」。 } }
要求: http://dcshi.com/break/***
出力: BREAKページ
分析:としては、上記の議論は、書き換え相電流の要求をスキップして、ために、明らかに、他の要求と、このフェーズを継続するために破りますエコー「ブレーク・ページ」に対応するI / Oコンテンツ位相FOO;(コンテンツステージは、単にリターン静的ページコンテンツとして位相生成出力データとして理解することができるコンテンツの段階であり、エコーコマンドは、通常の状況下で、コンテンツの段階で実行されコンテンツ出力段に相当する場所として、1つの命令のみ、2つのエコーの構成に、それが最終的にエコー命令を実行する必要があります);もちろん、あなたが入れた場合/休憩/コメントでechoコマンド、次に訪問する/ブレーク/ xxの再報告されます。けれども/休憩/ XXこの/に/テスト/ xxにリダイレクトされますが、ブレークコマンドが再オープンし、新しい要求が一致し続けないので、nginxの次/テストに適合していない。我々の期待と同じであるが404、場所; echoコマンドの場合は、注釈付きで、/ブレイク/ nginxの唯一であるこの場所デフォルトのコンテンツの指示で行うことができ、内から/テスト/ XXこのHTMLページと出力を見つけよう ヨンは、実際には、このページには、それが404エラーが報告されます、存在しません。
要求: http://dcshi.com/last/***
出力: テストページ
の分析: 最後と破る市の最大の違いは、最後の意志の再起動新しい要求、および再マッチングの場所なので、用/最後、再試合を要求マッチ/試験後/、コンテンツに対応する最終段の出力は、テストページです。
問題はないとの最後の休憩を理解するために、あなたはnginxのの運用段階の一般的な理解を持っていると仮定します。
場所〜^ / TESTTEST / {
default_typeテキスト/ HTML;
111エコー;
}
書き換え^ / TESTTEST / /test.php最後。
アクセス/ TESTTEST /出力の値が/test.phpコンテンツである場合には、明らかに、書き換えを書き換えること、およびかかわらず、記述および位置の、交換位置と位置、同一の結果を書き換えます。