2017-05-26 24 views
2

我目前使用與try_files的REST類型的應用程序一起以下位置指令:用正則表達式Nginx的位置指令提取文件夾名稱,使用try_files

location /branches/branchx/app/api/ { 
    try_files $uri $uri/ /branches/branchx/app/api/api.php$is_args$args; 
} 

哪裏branchx是我的Git的名字科。因此,我可以有多個分支,如:branch1branch2等。

因此,我需要手動創建的每一個分支我將創建一個指令。

爲了避免這個問題,我期待使用正則表達式來提取分支名稱並在我的try_files指令中使用它。所以我有一個單一的位置指令照顧各分公司管理的動態系統。

所有試圖使用正則表達式在try_files迄今通過拋出405或404錯誤而告終。

我最後一次嘗試(基於@Richard史密斯回答):

location ~ ^(/branches/[^/]+/app/api)/ { 
    try_files $uri $uri/ $1/api.php$is_args$args; 
} 

哪個返回匹配的URI 405(不支持)應答。

回答

1

如果使用正則表達式location,你可以在同一時間捕捉的路徑。例如:

location ~ ^(/branches/[^/]+/app/api)/ { 
    try_files $uri $uri/ $1/api.php$is_args$args; 
} 

重要提示:從前綴location更改爲正則表達式location將改變計算順序。正則表達式location塊按順序評估,因此/branches/branchx/app/api/api.php將與此location相匹配,除非將其放置在location ~ \.php$位置塊之後。詳情請參閱this document

+0

這似乎並不爲我工作。由於我有沒有把在本例中爲簡化多了一個子文件夾:'/分支機構/ BRANCH1 /應用/ API /'我適應與'〜^(/分支機構/ [^ /] + /應用/ API,你的榜樣)/'和'$ 1/app/api.php'的try_files。有什麼建議麼? –

+0

有許多選擇,但沒有看到的問題是很難提出具體的建議。你應該考慮編輯你的問題並改進你的例子。 –

+0

這樣做我澄清了這個問題。關於位置,我剛剛添加了'app'子文件夾。 –