带有正则表达式的Nginx位置指令,用于提取文件夹名称并在try_files中使用

时间:2017-05-26 03:31:02

标签: nginx restful-url

我目前正在使用以下位置指令和try_files来完成一个restfull应用程序:

getMethodName()

其中location /branches/branchx/app/api/ { try_files $uri $uri/ /branches/branchx/app/api/api.php$is_args$args; } 是我的Git分支的名称。因此,我可能有多个分支,例如:branchxbranch1等。

因此我需要为我将创建的每个分支手动创建一个指令。

为了避免这个问题,我希望使用正则表达式来提取分支名称并在我的try_files指令中使用它。所以我有一个由单个位置管理的动态系统指示照顾所有分支机构。

到目前为止,在try_files中使用正则表达式的所有尝试最终都会抛出405或404错误。

我的最后一次尝试(基于@Richard Smith回答):

branch2

返回了匹配uri的405(不允许)响应。

1 个答案:

答案 0 :(得分: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