A location can either be defined by a prefix string, or by a regular expression.
location匹配命令包括前缀和正则表达式两种。具体有如下几种匹配命令:
波浪线表示执行一个正则匹配,区分大小写
表示执行一个正则匹配,不区分大小写
匹配路径的前缀,如果找到,停止搜索。
表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
进行普通字符精确匹配
“@” 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files
=(精确匹配) > ^~(特殊路径前缀匹配) > ~*(正则匹配) = ~(正则匹配) > 普通路径前缀匹配
=(精确匹配) > ^~(特殊路径前缀匹配)
loaction ^~ /admin {
[ configuration A ]
}
loaction = /admin {
[ configuration B ]
}
结果:/admin匹配进 [ configuration B ]
^~(路径的前缀匹配) > ~*(正则匹配) = ~(正则匹配)
loaction ~* ^/admin {
[ configuration A ]
}
loaction ~ ^/admin {
[ configuration B ]
}
loaction ^~ /admin {
[ configuration C ]
}
结果:/admin匹配进 [ configuration C ]
按特殊路径前缀匹配匹配时,前缀越具体(越长)则优先匹配。
loaction ^~ /admin {
[ configuration A ]
}
结果:/admin/a匹配进 [ configuration A ]
loaction ^~ /admin {
[ configuration A ]
}
loaction ^~ /admin/a {
[ configuration B ]
}
结果:/admin/a匹配进 [ configuration B ]
正则匹配是按照配置时定义的顺序来匹配的,先匹配到的就停止。
loaction ~* ^/admin {
[ configuration A ]
}
loaction ~ ^/admin {
[ configuration B ]
}
结果:/admin匹配进 [ configuration A ]
按普通路径前缀匹配时,也是前缀越具体(越长)则优先匹配
loaction /admin {
[ configuration A ]
}
结果:/admin/a匹配进 [ configuration A ]
loaction /admin {
[ configuration A ]
}
loaction /admin/a {
[ configuration B ]
}
结果:/admin/a匹配进 [ configuration B ]
location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
location /documents/ {
[ configuration C ]
}
location ^~ /images/ {
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
结果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 ]
结果1说明=(精确匹配优先级最高);
结果2及结果3说明前缀匹配时,前缀越具体(越长)则优先匹配;
结果4及结果5说明^~(路径的前缀匹配)优先级高于 ~*(正则匹配)。
感谢您的阅读!
如果看完后有任何疑问,欢迎拍砖。
欢迎转载,转载请注明出处:http://www.yangrunwei.com/a/28.html
邮箱:glowrypauky@gmail.com
QQ: 892413924