gpt4 book ai didi

Nginx 重写具有多个替换的查询参数

转载 作者:行者123 更新时间:2023-12-04 13:19:34 25 4
gpt4 key购买 nike

您好,我们使用 nginx,由于系统发生变化,我们必须临时对某些带有查询参数的 URL 进行 301 查询。我搜索了很多但没有找到解决方案。

我们想要

  • 用新值替换查询参数列表
  • 进行多次替换

所以我们的 URI 应该重写为:

/page?manufacturer=812 **becomes** /page?brand=812
/page?manufacturer=812&color=11 **becomes** /page?brand=812&colour=33
/page?manufacturer=812&color=11&type=new **becomes** /page?brand=812&colour=33&sorttype=new
/page?color=11&type=new&manufacturer=812 **becomes** /page?colour=33&sorttype=new&brand=812

我知道如何搜索和替换。但是如何搜索和替换多个 值呢?我正在尝试以下操作:

# Rewrite after attributes renaming
rewrite ^/(.*)manufacturer\=(.*)$ /$1brand=$2;
rewrite ^/(.*)color=(.*)$ /$1colour=$2;
rewrite ^/(.*)type=(.*)$ /$1sorttype=$2;
# there are about 20 more ...

我的问题:如何进行多重替换? (只要服务器执行“旧”命令,甚至不必重写)。我应该使用 map 语句还是有更好的技巧?

提前致谢!

最佳答案

如果您有不确定顺序的不确定数量的参数,最简单的方法可能是一次修改一个,然后递归地重定向 URL,直到所有参数都被替换。

map 指令便于管理一长串正则表达式。参见 this document了解详情。

该解决方案使用 $args 变量,它包含 URI 中 ? 之后的所有内容。我们在 $prefix 中捕获匹配之前的任何内容(如果它不是第一个参数),我们在 $suffix 中捕获参数的值和后面的任何参数。我们使用命名捕获,因为在评估新值时,数字捕获可能不在范围内。

例如:

map $args $newargs {
default 0;
~^(?<prefix>.*&|)manufacturer(?<suffix>=.*)$ ${prefix}brand$suffix;
~^(?<prefix>.*&|)color(?<suffix>=.*)$ ${prefix}colour$suffix;
~^(?<prefix>.*&|)type(?<suffix>=.*)$ ${prefix}sorttype$suffix;
}

server {
...
if ($newargs) { return 301 $uri?$newargs; }
...
}

关于Nginx 重写具有多个替换的查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55361751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com