3

以下のコードでは、index ディレクティブがリクエストに追加page1.htmされ/ます。http://DOMAINしたがって、最初のロケーション ブロックではなく、2 番目のロケーション ブロックによって正確に一致することが期待されます。

index page1.htm;

location = /
    {
    rewrite / /page2.htm;
    }

location = /page1.htm
    {
    rewrite /page1.htm /page3.htm;
    }

しかし、それは一致する最初の場所です。http://DOMAIN私に与えて私page2.htmhttp://DOMAIN/page1.htm与えるpage3.htm.

=プレフィックスはどのような完全一致を可能にしますか?

多くのドキュメントを閲覧しましたが、ここで何が起こっているのかわかりません。最初の場所が削除されると、場所の一致を試みる前にインデックスを使用しているように見えますhttp://DOMAIN。上記の場合、インデックスが適用された後に uri が になったのにpage3.htm、なぜ一致するのでしょうか?location = //page1.htm

最初にインデックスを適用せずに場所をテストし、次に一致しない場合にのみ、インデックスを適用して再度テストしますか?

4

3 に答える 3

4

他の誰かがこのややあいまいな質問を調査している場合に備えて、回答を投稿しています。さらにテストすると、次のことが明らかになります。

  1. indexURI がサーバー ブロックに到着すると、ディレクティブを適用せずに場所を解析します。

  2. 結果のパスが有効なディレクトリに解決され、indexディレクティブが存在する場合、インデックス内のファイル名がパスに順次追加され、有効なファイルが存在するかどうかがテストされます。

  3. 手順 2 で (存在するインデックス ファイル名を追加することによって) パスが変更された場合、場所は新しいパスで再度解析されます。

于 2016-02-10T19:54:21.390 に答える
-1

URLhttp://example.comhttp://example.com/は、実際には HTTP とまったく同じです。どちらも次のように送信されます

GET / HTTP/1.1
Host: example.com
... other headers

パス部分が空になることはなく、常にスラッシュで始まることを意味します/http://example.comその場合、 へのリクエストが で終わることは明らかpage2.htmです。

手順:

  1. Nginxは完全一致/を見つけ、リクエストを次のように書き直しました/page2.htm
  2. 一致する場所が/page2.htmないため、nginx は静的ファイルを提供しただけです。

ここでは使用されていないことがわかりindexます。

于 2016-02-10T07:31:22.140 に答える