nginx重写没有将$arg_page转发到上游

问题描述 投票:0回答:1

我有

rewrite (?i)^/museums/Andorra /search-results?country=ad&page=$arg_page break;
// 246 more similar rewrites for other country codes.
proxy_pass http://127.0.0.1:7001;

然而,当我去 /museums/Andorra&page=1 浏览器中的 REQUEST_URI 中的代理应用设置为 /search-results?country=ad&page=

nginx有点老了:1.14.2,如果有关系的话。然而,这个2013年的答案 https:/stackoverflow.coma17739990308851。 似乎暗示着 $arg 重写的替换部分中的变量应该是可以的,我已经重写了(?i)^museumsAndorra search-results?country=ad&page=$arg_page break; / 246其他国家代码的类似重写。

nginx url-rewriting
1个回答
0
投票

你是正确的 rewrite 可以使用 $arg_ 在重写的URI中加入参数,尽管你不一定需要。

有两个问题。

你不需要在URI中添加 &page=$arg_page 到重写的URI的结尾,如 rewrite 将自动附加原始查询字符串,除非重写后的URI以 ?. 所以你现有的 rewrite 语句将产生 /search-results?country=ad&page=1&page=1 (假设 $arg_page 变量被设置)。)

使用其中之一。

rewrite (?i)^/museums/Andorra /search-results?country=ad break;

或。

rewrite (?i)^/museums/Andorra /search-results?country=ad&page=$arg_page? break;

本文件 以了解详情。


你的测试URL不包含查询字符串。

请使用。

/museums/Andorra?page=1
© www.soinside.com 2019 - 2024. All rights reserved.