NGINX是否支持PCRE2扩展替换处理?



我需要做一些非常复杂的重写,我不想重复太多。PCRE2 条件替换允许我这样做,但我似乎无法让它们在 nginx 中工作。只是不支持还是我做错了什么?

这些是我想统一的重写。

rewrite /intro/(es|en)-(es|uk)/pageA /$1-$2/pageB/;
rewrite /intro/(es|en)_(es|uk)/pageA /$1-$2/pageB/;
rewrite /intro/(es|en|uk)/pageA /$1/pageB/;

不,它没有。 nginx目前仅支持原始PCRE库。

不,因为在 NGINX 配置中,无论使用什么正则表达式引擎(PCRE 或 PCRE2(,您都不会使用 PCRE 替换来组合正则表达式捕获的值。

NGINX只是从正则表达式中获取捕获的值,并将其转换为NGINX变量。 然后,rewrite和其他指令允许您使用这些变量将它们组合成新字符串,使用标准 NGINX 表达式(文档声明值可以包含文本、变量及其组合(。

所以,不,不幸的是,你不能使用任何PCRE2替换功能。

也许你可以使用map指令来代替,根据正则表达式设置一个新变量:

http {
# map can only be used at the http context
map $uri $intro_lang {
~^/intro/(es|en)[-_](es|uk)/    "$1-$2"
~^/intro/(es|en|uk)/            "$1"
default                         "uk"
}
server {
# rewrite goes in the server context, or inside a location directive.
rewrite /intro/[^/]*/pageA /intro/$intro_lang/pageB/;
}
}

映射中的每个~前缀条目都是正则表达式,如果匹配,则命名变量$intro_lang设置为该表达式的值。此处的值可以使用变量,因此此处使用$1$2位置捕获。

请注意,maphttp上下文中;如果您使用的发行版使用包含来自/etc/nginx/conf.d的文件,那么这些文件通常已经包含在http {}上下文中,因此这些包含文件的顶级是map指令的正确上下文。

最新更新