nginx 映射规则,不区分大小写

And*_*wby 3 nginx

我试图强制一个 URL 指向一个新位置。例如:

  • site.com/Gites/
  • site.com/gites/

我目前在网站上设置了一个“地图”:

map $uri $is_rewrite {
    default     no_redirect;
    include /home/xxx/conf/web/chambres.com.extra/links.map;
}
Run Code Online (Sandbox Code Playgroud)

...在该文件中,规则之一是:

/gites/ https://$http_host;
#/Gites/ https://$http_host;
/french/Gites/ https://$http_host;
Run Code Online (Sandbox Code Playgroud)

如果我取消注释第 2 行,则会出现错误!

nginx: [emerg] /home/xxx/conf/web/chambres.com.extra/links.map:107 中的参数“/gites/”冲突

当我测试它时,果然,小写的有效,但大写的“Gites”无效。我怎样才能让它不区分大小写?

Mic*_*ton 7

nginxmap指令确实被记录为进行不区分大小写的字符串匹配。

字符串匹配忽略大小写。

如果这其实是你的情况的问题(比如,你需要不同的结果/gites//Gites/),那么你可以使用正则表达式匹配,它可以是区分大小写不敏感或。

正则表达式应该从“~”区分大小写匹配的符号开始,或者从不“~*”区分大小写匹配的符号 (1.0.4) 开始。

所以你可以匹配:

~^/gites/ https://one;
~^/Gites/ https://two;
Run Code Online (Sandbox Code Playgroud)

请记住,只有在映射中没有纯字符串值匹配时才会检查正则表达式。

如果您不需要每个字符串的不同结果,那么您不需要做任何事情。一个字符串匹配将涵盖所有情况。

  • 使用正则表达式,需要记住锚点,因为“~/gites/”将匹配第一行和第三行示例。因此,正则表达式需要类似于“~^​​/gites/”。 (2认同)