Location 匹配模式

一、语法

location [=|~|~*|^~] uri{
    root /var/www/html
    index index.html index.htm
}
1. 普通模式
中括号中的符号 ,表示不同的匹配模式,若不填写,则表示普通模式
2. 精确模式 =
location = /web/index.html {
    root /var/www/html
    index index.html index.htm
}

仅当访问的域名后的地址为“/web/index.html”时 匹配成功。

需要注意的是,当普通匹配的结果是严格精确的,则停止匹配返回结果。

3. 正则模式 ~ / ~
~  表示区分大小写 
~* 表示不区分大小写

location ~* /.(jpg|gif|jpeg) {
    root /var/www/html/resource/images
}

当访问的资源是一个图片时 匹配成功

4. 非正则模式 ^~

^表示“非”,~表示正则,连起来就表示"非正则",既不使用正则匹配

  在不使用“非正则”的时候,执行完普通匹配后,并不会返回匹配结果,而是继续正则匹配。如果使用了“非正则模式”,则在执行完普通模式后执行非正则模式,一旦匹配(不需要精确),马上返回结果。

二、Location流程图

  location 的指令与编辑顺序无关,这句话不全对。对于普通 location 指令,匹配规则是:最大前缀匹配(与顺序无关),如果恰好是严格精确匹配结果或者加有前缀“ ^~ ”或“ = ”(符号“ = ”只能严格匹配,不能前缀匹配),则停止搜索正则 location ;但对于正则 location 的匹配规则是:按编辑顺序逐个匹配(与顺序有关),只要匹配上,就立即停止后面的搜索。

Location流程图

文字说明

  1. 进行精准匹配,检查是否在=精准匹配模式下,匹配成功,若成功则停止检查。

  2. 进行普通匹配,匹配完成后,记录匹配到的最长的结果,如果这个结果恰好是完全精准的匹配,则把该结果看做是精准匹配,会停止检查,立即返回该结果。

  3. 判断是否可以进行正则匹配,如果存在^=符号的location段,表示不进行正则匹配,立即返回结果。

  4. 按照书写顺序正则匹配,匹配到立即返回结果


waterandair
1.3k 声望78 粉丝

落棋不悔