location符合的是nginx的哪個變數?
$request_uri
location的符合種類有哪些?
=
開頭表示精確比對
##^~ 開頭,注意這不是正規表示式(是提升優先權的字串比對)–它的目的是優先於正規表示式的符合。如果該location是最佳匹配,則不再進行正規表示式檢測。
~ 開頭表示區分大小寫的正規匹配;
~* 開頭表示不區分大小寫的正規符合
!~ && !~*:表示區分大小寫不符的正則和不區分大小寫的不匹配的正則
字串匹配
/通用匹配, 如果沒有其它匹配,任何請求都會匹配到location搜尋順序
首先精確匹配 =
^~
#注意:
當有匹配成功時,立刻停止匹配,按照當前匹配規則處理請求特別注意:字符串匹配優先搜索,但是只是記錄下最長的匹配,然後繼續搜尋正則匹配,如果有正則匹配,則命中正則匹配,如果沒有正則匹配,則命中最長的字符串匹配。 ( 如果^~ 是最長的匹配,則會直接命中,停止搜尋正則)精確匹配
location = /images/test.png { echo 'config1'; } location /images/test.png { echo 'config2'; } location \/images\/test\.png$ { echo 'config3'; }
http:/ /127.0.0.1/images/test.png 會輸出什麼呢?
config1, 毋容置疑,精確匹配優先順序最高!
location = / { index index.html; } location / { echo 'config2'; }
http://127.0.0.1 會輸出什麼呢?
http://127.0.0.1/index.html, 這是
config2則被命中!
location /images/test.png { echo 'config1'; } location ^~ /images/ { echo 'config2'; } location ~ \/images\/test\.png$ { echo 'config3'; } location ~ \/images\/ { echo 'config4'; }
http://127.0.0.1/images/test.png 會輸出什麼呢?
config3,正規命中
location /images/ {
echo 'config1';
}
location ^~ /images/test.png {
echo 'config2';
}
location ~ /images/test\.png$ {
echo 'config3';
}
location ~ \/images\/ {
echo 'config4';
}
會輸出什麼呢? 當然是
, 首部匹配命中(因為字串匹配是優先搜尋的,此時發現config2 為最長的字串匹配且為^~匹配方式,所以停止搜尋正則,直接命中!)
所以這裡的
^~ 符號比較特殊,就是為了提高字符串匹配的優先級,優先於正則匹配.相關推薦:《
以上是關於nginx location指令詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!