Nginx 重写:根据传入 URL 格式不同的 URL

Nginx 重写:根据传入 URL 格式不同的 URL

我有一台服务器,它会接收 2 种不同类型/格式的请求。两个请求 URL 都以以下内容开头:http://myredirect.mycompany.com/browse/。'/browse/' 之后要么是数字:

http://myredirect.mycompany.com/browse/12345, it can be any number

或者为 2 到 4 个大写字母,后跟一个“-”,再跟一个数字:

http://myredirect.mycompany.com/browse/QA-12345

我想要做的是根据传入 URL 重定向到不同的 URL。例如:

http://myredirect.mycompany.com/browse/12345 would redirect to http://serverA.mycompany.com/show_item.cgi?12345

http://myredirect.mycompany.com/browse/QA-12345 would redirect to http://serverB.mycompany.com/browse/QA-12345

我想我想要的是使用 nginx 重写,但我不确定如何形成。从我在 Google 上搜索到的内容来看,你可以在重写中使用正则表达式,所以我可以使用类似

^(/browse/[0-9])?

第一个。但我如何才能真正把这个数字拉进重定向 URL 中呢?谢谢!

答案1

阅读nginx 的文档PCRE 库文档可以帮助您了解重写和正则表达式的工作原理。

对于您的示例,您需要一个位置块来包装两个重写规则,如下所示:

location /browse {
    rewrite ^/browse/(\d+)$ http://serverA.mycompany.com/show_item.cgi?$1 [flag];
    rewrite ^/browse/([A-Z]{2,4}-\d+)$ http://serverB.mycompany.com/browse/$1 [flag];
}

[flag]根据所需的重定向代码(301 或 302)替换permanent或。redirect

相关内容