gpt4 book ai didi

redirect - nginx:使用参数重写大量(2000+)url

转载 作者:行者123 更新时间:2023-12-02 22:05:47 25 4
gpt4 key购买 nike

我必须迁移很多带有参数的 URL,如下所示:

/somepath/somearticle.html?p1=v1&p2=v2 --> /some-other-path-a

以及不带参数的相同 URL:

/somepath/somearticle.html --> /some-other-path-b

棘手的部分是,在新系统中,两个目标 URL 是完全不同的页面,而在旧系统中,参数只是指示默认打开哪个选项卡。

我尝试了不同的重写规则,但得出的结论是nginx重写不考虑参数。我找到了一种使用位置指令的方法,但拥有 2000 多个位置指令感觉不对。

有人知道如何以优雅的方式完成此任务吗?值得注意的是,除了这 2000 多个重定向之外,我还有另外 200.000(!) 个重定向。它们已经可以工作了,因为它们相当简单。所以我想强调的是,性能应该是关键!

最佳答案

您无法匹配 locationrewrite 表达式中的查询字符串(从 ? 开始的任何内容),因为它不是标准化的 URI。请参阅this document了解详情。

整个 URI 在 $request_uri 参数中可用。如果参数未按一致的顺序发送,则使用 $request_uri 可能会出现问题。

<小时/>

要处理多个 URI,请使用 map 指令,例如:

map $request_uri $redirect {
default 0;
/somepath/somearticle.html?p1=v1&p2=v2 /some-other-path-a;
/somepath/somearticle.html /some-other-path-b;
}

server {
...
if ($redirect) {
return 301 $redirect;
}
...
}

您还可以在映射中使用正则表达式,例如,如果 URI 还包含可选的不匹配参数。请参阅this document了解更多。

关于redirect - nginx:使用参数重写大量(2000+)url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49191594/

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