使用脚本而不是 Nginx 的正则表达式 prox_redirect 来修改位置 header
Use script instead of regex for Nginx prox_redirect to modify Location header
对于 Nginx,proxy_redirect,我们可以使用字符串而不是字符串或正则表达式吗?我需要使用 proxy_redirect 替换 Location 字符串中多次出现的文本,但我不确定如何使用正则表达式进行替换。因此,我正在检查 proxy_redirect 是否可以让我们使用脚本,然后它可能很容易。
您可以在包含 proxy_pass
语句的单个块中使用多个 proxy_redirect
语句。 Nginx 按顺序评估包含正则表达式的语句,直到找到匹配项,因此将更具体的正则表达式放在不太具体的正则表达式之前。
要替换 3xx 响应的 Location
header 中出现的单个模式,您可以使用:
proxy_redirect ~^(.*)origin.example.com(.*)$ main.example.com;
要替换同一模式的两次出现,您可以使用:
proxy_redirect ~^(.*)origin.example.com(.*)origin.example.com(.*)$ main.example.commain.example.com;
要替换同一模式的一次、两次或三次出现,您可以使用:
proxy_redirect ~^(.*)origin.example.com(.*)origin.example.com(.*)origin.example.com(.*)$ main.example.commain.example.commain.example.com;
proxy_redirect ~^(.*)origin.example.com(.*)origin.example.com(.*)$ main.example.commain.example.com;
proxy_redirect ~^(.*)origin.example.com(.*)$ main.example.com;
使用~*
使正则表达式case-insensitive。有关详细信息,请参阅 this document。
对于 Nginx,proxy_redirect,我们可以使用字符串而不是字符串或正则表达式吗?我需要使用 proxy_redirect 替换 Location 字符串中多次出现的文本,但我不确定如何使用正则表达式进行替换。因此,我正在检查 proxy_redirect 是否可以让我们使用脚本,然后它可能很容易。
您可以在包含 proxy_pass
语句的单个块中使用多个 proxy_redirect
语句。 Nginx 按顺序评估包含正则表达式的语句,直到找到匹配项,因此将更具体的正则表达式放在不太具体的正则表达式之前。
要替换 3xx 响应的 Location
header 中出现的单个模式,您可以使用:
proxy_redirect ~^(.*)origin.example.com(.*)$ main.example.com;
要替换同一模式的两次出现,您可以使用:
proxy_redirect ~^(.*)origin.example.com(.*)origin.example.com(.*)$ main.example.commain.example.com;
要替换同一模式的一次、两次或三次出现,您可以使用:
proxy_redirect ~^(.*)origin.example.com(.*)origin.example.com(.*)origin.example.com(.*)$ main.example.commain.example.commain.example.com;
proxy_redirect ~^(.*)origin.example.com(.*)origin.example.com(.*)$ main.example.commain.example.com;
proxy_redirect ~^(.*)origin.example.com(.*)$ main.example.com;
使用~*
使正则表达式case-insensitive。有关详细信息,请参阅 this document。