我有一个服务器,将有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为permanent或redirect具体取决于所需的redirect代码(301或302)。