Nginx `proxy_redirect` 中的正则表达式加变量

Regex plus variable in Nginx `proxy_redirect`

Nginx proxy_redirect允许使用$my_var等变量和正则表达式,前缀为~.

但两者结合使用似乎是不可能的。这可能吗,转义 meta-characters 的正确语法是什么?

例如,我试过:

proxy_redirect ~*https?://\$proxy_host/(.*)$ /app1/
proxy_redirect ~*https?://$proxy_host/(.*)$ /app1/
proxy_redirect ~*https?://$proxy_host/(.*)$ /app1/

显然最后一个示例是不正确的,因为 proxy_host 之前的 $ 被解释为正则表达式元字符。但是另外两个例子也不起作用。 (它们无法被识别,所以不要重写 Location header。

当我替换为

proxy_redirect ~*https?://[^/]+/(.*)$ /app1/

重定向工作得很好。

问题是即使是外部重定向也会重定向,所以太包容了。

变量和正则表达式是互斥的。

要同时匹配 httphttps,您可以使用两个连续的语句,例如:

proxy_redirect http://$proxy_host/ /app1/;
proxy_redirect https://$proxy_host/ /app1/;

匹配字符串后的任何内容都会自动附加到替换字符串中,因此不需要正则表达式。