码迷,mamicode.com
首页 > 其他好文 > 详细

Nginx之location匹配规则(个人总结)

时间:2016-05-03 00:45:06      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:location   匹配规则   

Location匹配的url的语法规则:

syntax: location [=|~|~*|^~|@] /uri/ { … }

default: no

context: server
=             表示精确匹配

^~             表示普通字符匹配,不继续匹配正则,一般用来匹配目录

~             表示区分大小写的正则匹配

~*              表示不区分大小写的正则匹配

!~ 和!~*       分别表示区分大小写和不区分大小写不匹配的正则

@                 定义一个命名的location,使用在内部重定向时,例如 error_page,try_files 

/                   通用匹配,如果没有其它location匹配,任何请求都会匹配到

 

1、location依据不同的前缀=、^~、~、~* 和不带任何前缀的(因为[]表示可选,可以不要的),表达不同的含义,。简单的说尽管location的/uri/ 配置一样,但前缀不一样,表达的是不同的指令含义

2、查询字符串不在URI范围内,例如:/films.htm?fid=123 的URI是/films.htm
3、这些不同前缀,分为两大类:正则location和普通location。~ 和~* 前缀表示正则location ,~ 区分大小写,~* 不区分大小写;其他前缀(包括:=、^~ 和@ )和无任何前缀的都属于普通location

 

匹配顺序:
1、精确匹配到=定义的loacation,使用这个location,停止搜索;
2、所有剩下的普通location,最长的匹配,如果这个最长location带有^~,使用这个location,停止搜索,否则:
3、存储这个最长location;
4、按配置文件中的顺序匹配正则location;
5、匹配到第一条正则location,使用这个location,停止搜索;
6、没有匹配到正则location,使用第二步中存储的最长location。

 

用一句话概括就是:先普通,后正则,正则location匹配让步普通location的严格精确匹配结果,但覆盖普通location的最长匹配结果


^~ 和= 都能阻止继续搜索正则location的话,那它们之间有什么区别呢?区别很简单,共同点是它们都能阻止继续搜索正则location,不同点是^~依然遵守最长匹配规则,然而=不是,而是必须是严格精确匹配。

本文出自 “每天进步一点” 博客,请务必保留此出处http://yujia2016.blog.51cto.com/59379/1769511

Nginx之location匹配规则(个人总结)

标签:location   匹配规则   

原文地址:http://yujia2016.blog.51cto.com/59379/1769511

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!