Nginx重写:基于传入的URL格式的不同的URL

我有一个服务器,将有2个不同types/格式的请求进来。两个请求的URL将开始: http://myredirect.mycompany.com/browse/ : 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

我想要做的redirect到一个基于传入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重写,但我不知道如何形成。 从我googlesearch,你可以使用正则expression式重写,所以我可以使用类似的东西

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

为第一个。 但是,我怎么才能真正把这个号码拉到redirecturl? 谢谢!

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

对于你的例子,你将需要一个位置块包装这样的两个重写规则:

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

[flag]replace为permanentredirect具体取决于所需的redirect代码(301或302)。