nginx 从位置和重写使用正则表达式捕获组?

knsnq2tg  于 2023-01-01  发布在  Nginx
关注(0)|答案(1)|浏览(164)

举一些例子,如:

location ~ ^/([\d]+)/ {
    rewrite ^/[\d]+/([\d]+)/(.*)$ #replacement
    
    proxy_pass https://httpbin.org/anything/$1/$2/$3 # ?

}

捕获组会是什么?nginx会替换它们吗?合并它们吗?在那种情况下我会有3个捕获组吗?顺序会是什么?
我不清楚我将如何引用上面3个捕获组中的每一个。
引用捕获组的最后一个位置是proxy_pass。

mbzjlibv

mbzjlibv1#

每次Nginx对另一个正则表达式求值时,数值捕获都会被重置。
location表达式中的数值捕获将在proxy_pass语句求值时丢失。仅定义了$1$2,并且它们是从rewrite表达式中获取的。
要使捕获跨多个正则表达式持久化,请使用(?<name>...)语法为其命名。
例如:

location ~ ^/(?<name>[\d]+)/ {
    rewrite ^/[\d]+/([\d]+)/(.*)$ ...;        
    proxy_pass https://httpbin.org/anything/$name/$1/$2;
}

相关问题