case sensitive/in-sensitive 匹配在 nginx 中不起作用
case sensitive/in-sensitive match not working in nginx
在我的server
指令中,位置配置如下
location ~ \.(html)$ {
expires max;
return 200 "case sensitive match";
}
location ~* \.(html)$ {
expires 10d;
return 200 "case insensitive match";
}
我的期望是当我加载 localhost/somthing.html
时它应该打印 case sensitive match
并且当我加载 localhost/something.hTML
时它应该打印 case insensitive match
然而,在这两种情况下,case sensitive match
都会打印出来
access.log
中的请求登录为
127.0.0.1 - - [18/Apr/2021:17:56:15 +0530] "GET /something.hTML HTTP/1.1" 200 20 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15"
附上图片,查看打印的声明以及设置为 MAX
的 expires
,证明 case sensitive match
有效。这里可能出了什么问题?
location ~
匹配在具有不区分大小写文件系统的操作系统下仍然不区分大小写(例如 Mac OS & Windows)。
要强制使用不区分大小写的模式,您需要使用 (?-i)
将其包含在正则表达式本身中,例如
location ~ "(?-i)\.(html)$" {
...
}
在我的server
指令中,位置配置如下
location ~ \.(html)$ {
expires max;
return 200 "case sensitive match";
}
location ~* \.(html)$ {
expires 10d;
return 200 "case insensitive match";
}
我的期望是当我加载 localhost/somthing.html
时它应该打印 case sensitive match
并且当我加载 localhost/something.hTML
时它应该打印 case insensitive match
然而,在这两种情况下,case sensitive match
都会打印出来
access.log
中的请求登录为
127.0.0.1 - - [18/Apr/2021:17:56:15 +0530] "GET /something.hTML HTTP/1.1" 200 20 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15"
附上图片,查看打印的声明以及设置为 MAX
的 expires
,证明 case sensitive match
有效。这里可能出了什么问题?
location ~
匹配在具有不区分大小写文件系统的操作系统下仍然不区分大小写(例如 Mac OS & Windows)。
要强制使用不区分大小写的模式,您需要使用 (?-i)
将其包含在正则表达式本身中,例如
location ~ "(?-i)\.(html)$" {
...
}