nginx map 规则,不区分大小写

nginx map 规则,不区分大小写

我正在尝试强制 URL 指向新位置。例如:

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

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

map $uri $is_rewrite {
    default     no_redirect;
    include /home/xxx/conf/web/chambres.com.extra/links.map;
}

...并且该文件中有一条规则:

/gites/ https://$http_host;
#/Gites/ https://$http_host;
/french/Gites/ https://$http_host;

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

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

当我测试它时,小写字母确实有效,但大写字母“Gites”无效。我怎样才能让它不区分大小写?

答案1

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

字符串匹配时忽略大小写。

如果这确实是您遇到的问题(即您需要/gites/和的不同结果/Gites/),那么您可以使用正则表达式匹配,它可以区分大小写也可以不区分大小写。

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

因此你可以改为匹配:

~^/gites/ https://one;
~^/Gites/ https://two;

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

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

相关内容