位置 /foo 和位置有什么区别 ^~ /foo



我试图理解位置指令中^~修饰符的含义。

文档说

如果最长匹配的前缀位置具有"^~"修饰符,则 不检查正则表达式。

但我几乎无法理解它。既然是字符串前缀匹配,并且已经匹配,正则表达式在这里仍然如何相关?文档指的是哪些正则表达式?

两者之间有什么区别

location /foo {}
location ^~ /foo {}

正则表达式指:

  • ~ 修饰符,表示该位置将被解释为区分大小写的正则表达式匹配。
  • ~* 表示位置块将被解释为不区分大小写的正则表达式匹配。

例如,在以下配置中:

location ~* .(txt)$ {
     return 200 "in #1/n";
}
location /foo1    {
     return 200 "in #2/n";
}
location ^~ /foo2 {
     return 200 "in #3/n";
}

因此,对于以下网址:

    /
  • foo1/bar/sample.txt 将在 #1 中返回
  • /
  • foo2/bar/sample.txt 将在 #3 中返回,因为最长匹配的前缀位置具有 ^~ 修饰符

最新更新