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"

附上图片,查看打印的声明以及设置为 MAXexpires,证明 case sensitive match 有效。这里可能出了什么问题?

location ~ 匹配在具有不区分大小写文件系统的操作系统下仍然不区分大小写(例如 Mac OS & Windows)。

要强制使用不区分大小写的模式,您需要使用 (?-i) 将其包含在正则表达式本身中,例如

location ~ "(?-i)\.(html)$" {
    ...
}

this (very old) issue