2017-03-08 78 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

太棒了,謝謝!我完全誤解了正則表達式位置不是前綴的事實。 –