通过 NGINX 替换请求参数中的指定字符
Replacing specifing character in arguments of request via NGINX
我正在尝试将参数部分中的特定字符(+ 加号)替换为 space 字符 (%20)。
我重写了路径部分,但在测试时我了解到 NGINX 在 ? 之后不会更改参数。签名(我是 NGINX 的新手)。
我尝试为配置的 args 部分执行此操作,但它无法正常工作,它会增加 20 美元,直到我收到页面未正确重定向的错误消息。
我收到的请求URL)总是一样的
func=autocomplete&q=<(unlimited number of letters and plus signs (mostly 4-5 plus signs)>&key_lic=xxxxx
NGINX 配置中的代码如下。
location /autocomplete/luka/ {
if ($args ~* "^([^+]*)(\+?)([^+]*)(\+?)([^+]*)(\+?)(.*)$"){
set $args %20%20%20;
rewrite (.*)$ redirect;
}
proxy_pass http://link.where.to.finish/wm2/;
}
感谢您提供的任何帮助。
您现有的方案失败,因为所有 +
符号都是可选的。
如果你想将你的 URI 重定向到所有 +
符号都被 %20
替换的 URI,你可以只使用 space 并让 Nginx and/or 浏览器处理编码。
例如:
if ($args ~ ^(.*)\+(.*)$) { return 302 "$uri? "; }
重定向是递归的,直到所有 +
符号都被替换。
如果您打算在不重定向的情况下更正 URI,以便只有上游服务器看到 +
符号被 %20
替换,请改用 rewrite...last
。
例如:
if ($args ~ ^(?<first>.*)\+(?<second>.*)$) {
rewrite ^(.*)$ "?$first%20$second?" last;
}
在这种情况下,有必要在第一个正则表达式中使用命名捕获,以便它们可以在第二个正则表达式中使用。有关详细信息,请参阅 this document。
我正在尝试将参数部分中的特定字符(+ 加号)替换为 space 字符 (%20)。 我重写了路径部分,但在测试时我了解到 NGINX 在 ? 之后不会更改参数。签名(我是 NGINX 的新手)。
我尝试为配置的 args 部分执行此操作,但它无法正常工作,它会增加 20 美元,直到我收到页面未正确重定向的错误消息。
我收到的请求URL)总是一样的
func=autocomplete&q=<(unlimited number of letters and plus signs (mostly 4-5 plus signs)>&key_lic=xxxxx
NGINX 配置中的代码如下。
location /autocomplete/luka/ {
if ($args ~* "^([^+]*)(\+?)([^+]*)(\+?)([^+]*)(\+?)(.*)$"){
set $args %20%20%20;
rewrite (.*)$ redirect;
}
proxy_pass http://link.where.to.finish/wm2/;
}
感谢您提供的任何帮助。
您现有的方案失败,因为所有 +
符号都是可选的。
如果你想将你的 URI 重定向到所有 +
符号都被 %20
替换的 URI,你可以只使用 space 并让 Nginx and/or 浏览器处理编码。
例如:
if ($args ~ ^(.*)\+(.*)$) { return 302 "$uri? "; }
重定向是递归的,直到所有 +
符号都被替换。
如果您打算在不重定向的情况下更正 URI,以便只有上游服务器看到 +
符号被 %20
替换,请改用 rewrite...last
。
例如:
if ($args ~ ^(?<first>.*)\+(?<second>.*)$) {
rewrite ^(.*)$ "?$first%20$second?" last;
}
在这种情况下,有必要在第一个正则表达式中使用命名捕获,以便它们可以在第二个正则表达式中使用。有关详细信息,请参阅 this document。