location精準/正則匹配

location 語法php

location 定位的意思, 根據Uri來進行不一樣的定位.html

在虛擬主機的配置中,是必不可少的,location能夠把網站的不一樣部分,定位到不一樣的處理方式上.nginx

好比, 碰到.php, 如何調用PHP解釋器?  --這時就須要location正則表達式

location 的語法ide

location [=|~|~*|^~] patt {測試

}網站

中括號能夠不寫任何參數,此時稱爲通常匹配url

也能夠寫參數spa

所以,大類型能夠分爲3server

location = patt {} [精準匹配]

location patt{}  [通常匹配]

location ~ patt{} [正則匹配]

 


如何發揮做用?:

首先看有沒有精準匹配,若是有,則中止匹配過程.

location = patt {

    config A

}


若是 $uri == patt,匹配成功,使用configA

    location = / {

       root   /var/www/html/;

       index  index.htm index.html;

    }

    (=/精準匹配到/,可是,這是個目錄,index會去找文件,先找index.htm,沒有就找index.html。若是index.html也沒有,就走下一個location)

    location / {

      root   /usr/local/nginx/html;

      index  index.html index.htm;

    }

(先匹配精確匹配=/,不行再匹配/)

上面的配置分析:

若是訪問  http://xxx.com/

定位流程是 

1: 精準匹配中 /   ,獲得index頁爲  index.htm

2: 再次訪問 /index.htm , 這次內部轉跳uri已是/index.htm ,

根目錄爲/usr/local/nginx/html

3: 最終結果,訪問了 /usr/local/nginx/html/index.htm

上面的例子若是改一下,改爲準確到文件的精確訪問:

image.png


image.png

若訪問/,先去location =/,匹配/index.html,如有,就是/index.html,走location =/ index.html


再來看,正則也來參與.

location / {

    root   /usr/local/nginx/html;

    index  index.html index.htm;

}

 

location ~ image {

    root /var/www/image;

    index index.html;

}

 

若是咱們訪問  http://xx.com/image/logo.png

此時, / /image/logo.png 匹配

同時,image正則 image/logo.png也能匹配,誰發揮做用?

正則表達式的成果將會使用.

 

圖片真正會訪問 /var/www/image/logo.png

 

 


location / {

    root   /usr/local/nginx/html;

    index  index.html index.htm;

}

 

location /foo {

    root /var/www/html;

    index index.html;

}

咱們訪問 http://xxx.com/foo

 對於uri /foo,   兩個locationpatt,都能匹配他們

/能從左前綴匹配 /foo, /foo也能左前綴匹配/foo,

此時, 真正訪問 /var/www/html/index.html

緣由:/foo匹配的更長,所以使用之.;





location [ = | ~ | ~* | ^~ ] uri { ... }

在一個server中location配置段可存在多個,用於實現從uri到文件系統的路徑映射;ngnix會根據用戶請求的URI來檢查定義的全部location,並找出一個最佳匹配,然後應用其配置;

=:對URI作精確匹配;例如, http://www.magedu.com/, http://www.magedu.com/index.html

location  =  / {

...

}

~:對URI作正則表達式模式匹配,區分字符大小寫;

~*:對URI作正則表達式模式匹配,不區分字符大小寫;

^~:對URI的左半部分作匹配檢查,不區分字符大小寫;

不帶符號:匹配起始於此uri的全部的url;

匹配優先級:=, ^~, ~/~*,不帶符號;


= 嚴格匹配。若是這個查詢匹配,那麼將中止搜索並當即處理此請求。
~ 爲區分大小寫匹配(可用正則表達式)
!~爲區分大小寫不匹配
~* 爲不區分大小寫匹配(可用正則表達式)
!~*爲不區分大小寫不匹配
^~ 若是把這個前綴用於一個常規字符串,那麼告訴nginx 若是路徑匹配那麼不測試正則表達式。


location ^~ /images/ {
 # 匹配任何以 /images/ 開頭的任何查詢而且中止搜索。任何正則表達式將不會被測試。
}


image.png

相關文章
相關標籤/搜索