1. 程式人生 > >理解NGINX的重寫break和last,以及location匹配規

理解NGINX的重寫break和last,以及location匹配規

理解NGINX的重寫break和last,以及location匹配規則

2018年05月05日 23:37:41 Lan的CSDN 閱讀數:197

        location / {
            index  index.html index.htm index.php l.php;
if (!-e $request_filename) {
rewrite /[ac]\d+\.html /index/index/home last;
rewrite ^/admin$ /admin/login/login last;
rewrite ^(.*)$ /index.php?s=$1 last;
break;

}
           autoindex  off;

        }

1.break在重寫語句後會停止後續的重寫規則:rewrite ^(.*)$ /index.php?s=$1 break; 包括其他的location均不會再執行匹配

2.單獨寫:rewrite ^(.*)$ /index.php?s=$1 last;
break;

 

 

 

 

  只會停止本location的重寫規則。會用重寫後的url執行其他的location

3.last會用重寫後的url重新匹配所有的重寫規則。包括本location裡面的,意思為整個server裡面的重新匹配。

4.注意:非常需要注意的是,重寫規則會先匹配location外層的 如location =/1.php{rewrite ^(.*)$ /2.php last; , location ~ \.php(.*)$ ,location /flag { rewrite ^(.*)$ /1.php last; 。三種規則。訪問http://localhost/flag/1.php並不會訪問到2.php

而是出現:No input file specified.  因為 已經匹配到了location ~ \.php(.*)$規則。由於沒有/flag/1.php所以出現找不到檔案。

所以想要訪問/flag/1.php得到 2.php的內容的話:修改location /flag { rewrite ^(.*)$ /1.php last 為 location ^~ /flag { rewrite ^(.*)$ /1.php last

5.nginx location的url 匹配優先順序:

            1、=  首先是精準匹配優先順序最高

            2、^~ 其次是以某特定常規字串開頭的匹配,這個不是正則

            3、~ 、 ~*、!~、!~* 再次是按順序的正則匹配,依次為區分大小寫的正則匹配、不區分大小寫的正則匹配、依次為區分大小寫的正則不匹配、不區分大小寫的正則不匹配、

            4、最後是 / 的通用符匹配

            以上依次為nginx location的url 匹配優先順序

 

location優先順序示例

配置項如下:

 
  1. location = / {
  2. # 僅僅匹配請求 /
  3. [ configuration A ]
  4. }
  5. location / {
  6. # 匹配所有以 / 開頭的請求。
  7. # 但是如果有更長的同類型的表示式,則選擇更長的表示式。
  8. # 如果有正則表示式可以匹配,則優先匹配正則表示式。
  9. [ configuration B ]
  10. }
  11. location /documents/ {
  12. # 匹配所有以 /documents/ 開頭的請求。
  13. # 但是如果有更長的同類型的表示式,則選擇更長的表示式。
  14. # 如果有正則表示式可以匹配,則優先匹配正則表示式。
  15. [ configuration C ]
  16. }
  17. location ^~ /images/ {
  18. # 匹配所有以 /images/ 開頭的表示式,如果匹配成功,則停止匹配查詢。
  19. # 所以,即便有符合的正則表示式location,也不會被使用
  20. [ configuration D ]
  21. }
  22. location ~* \.(gif|jpg|jpeg)$ {
  23. # 匹配所有以 gif jpg jpeg結尾的請求。
  24. # 但是 以 /images/開頭的請求,將使用 Configuration D
  25. [ configuration E ]
  26. }

請求匹配示例

 
  1. / -> configuration A
  2. /index.html -> configuration B
  3. /documents/document.html -> configuration C
  4. /images/1.gif -> configuration D
  5. /documents/1.jpg -> configuration E

注意,以上的匹配和在配置檔案中定義的順序無關。