2017-03-08 33 views
1

我在我的nginx的配置在以下位置:如何制作正则表达式nginx位置?

server { 
    listen  80; 
    server_name localhost; 

    location ~ ^/(?!api)(.*)/api { 
     alias /var/www/api/$1; 
    } 

    location /api { 
     alias /var/www/api/latest; 
    } 

我想匹配/ API作为最新版本,和/ <版本>/API为别的。非正则表达式的位置工作正常,但我在其他位置得到403。

我不认为这是什么做的文件和权限的被服务,因为我得到一个403,如果我尝试访问

/latest/api 

即使这些是相同的文件由

/api 

有没有人有想法,为什么我得到403?

nginx的错误是:

directory index of "/var/www/api/latest" is forbidden, client: 
172.17.0.1, server: localhost, request: "HEAD /latest/api/ HTTP/1.1", 
host: "localhost" 
+0

我不熟悉nginx的CONFIGS,但似乎'/.+/ api'(比赛斜线,一个或多个字符,斜线,API)应该做的事你正在寻找。 – jhscheer

+0

我对它进行了一些研究,看起来,你需要引用你的位置正则表达式。 – jhscheer

+0

谢谢。不是说它不能改进,但正则表达式是匹配的(正如我可以从nginx日志中看到的那样)。这似乎是一个nginx问题 –

回答

0

的问题是不与正则表达式,但使用正则表达式location内使用alias指令。有关更多信息,请参阅this document

在相关说明中,不应使用负向视向断言,而应在前缀location上使用^~修饰符。有关更多信息,请参阅this document

例如:

location ~ ^(/[^/]+)/api(.*)$ { 
    alias /var/www/api$1$2; 
} 

location ^~ /api { 
    alias /var/www/api/latest; 
} 
+0

太棒了,谢谢!我完全误解了正则表达式位置不是前缀的事实。 –