我有一台服务器,它会接收 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