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/
重定向工作得很好。
问题是即使是外部重定向也会重定向,所以太包容了。
变量和正则表达式是互斥的。
要同时匹配 http
和 https
,您可以使用两个连续的语句,例如:
proxy_redirect http://$proxy_host/ /app1/;
proxy_redirect https://$proxy_host/ /app1/;
匹配字符串后的任何内容都会自动附加到替换字符串中,因此不需要正则表达式。
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/
重定向工作得很好。
问题是即使是外部重定向也会重定向,所以太包容了。
变量和正则表达式是互斥的。
要同时匹配 http
和 https
,您可以使用两个连续的语句,例如:
proxy_redirect http://$proxy_host/ /app1/;
proxy_redirect https://$proxy_host/ /app1/;
匹配字符串后的任何内容都会自动附加到替换字符串中,因此不需要正则表达式。