2011-10-12 76 views
3

我正在寻找使用NGINX来处理API版本控制。我认为这将是这样简单来处理发送的业务到不同的网址:NGINX API版本控制技术

location = /1.0/* { 
     root = /var/www/html/version_1.0/public; 
    } 
    location = /1.1/* { 
     root = /var/www/html/version_1.1/public; 
    } 

我然后写一些形式重写的,以汽提出从URL 1.0 /或1.1 /。那是对的吗?总之,定位方法不起作用。我的语法关闭了吗?

谢谢!

回答

3

确认这是不是matching order

nginx的第一搜索的文本字符串不管列出的顺序给出的最具体的地理位置。在上面的配置中,唯一的文字位置是“/”,因为它匹配任何请求,所以它将被用作最后的手段。
然后nginx按配置文件中列出的顺序检查正则表达式给出的位置。第一个匹配表达式会停止搜索,nginx将使用此位置。
如果没有正则表达式匹配请求,则nginx使用前面找到的最具体的文字位置。

你可以试试a location directive,测试你想要的文字,并防止任何正则表达式来进行检查:

location ^~ /1.0/ { 
    # matches any query beginning with /1.0/ and halts searching, 
    # so regular expressions will not be checked. 
    [ configuration C ] 
} 

然后你可以检查rewrite procedures

+0

^〜不是正则表达式的位置,它是一个不会被正则表达式位置覆盖的前缀位置。您在该位置的评论也是如此。 – kolbyjack

+0

@kolbyjack:好点,我编辑了答案来反映它。 – VonC

+0

“location ^〜/1.0/”和“location = /1.0/”(OP的配置没有“*”)是非常相同的事情。 – Dayo