Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nginx location指令,带正则表达式,用于提取文件夹名称并在try\u文件中使用_Nginx_Restful Url - Fatal编程技术网

Nginx location指令,带正则表达式,用于提取文件夹名称并在try\u文件中使用

Nginx location指令,带正则表达式,用于提取文件夹名称并在try\u文件中使用,nginx,restful-url,Nginx,Restful Url,我目前正在使用以下位置指令以及restfull应用程序的try_文件: location /branches/branchx/app/api/ { try_files $uri $uri/ /branches/branchx/app/api/api.php$is_args$args; } 其中branchx是我的Git分支的名称。因此,我可能有多个分支,例如:branch1,branch2,等等 因此,我需要为我将要创建的每个分支手动创建一个指令 为了避免这个问题,我希望使用正则表达式

我目前正在使用以下位置指令以及restfull应用程序的try_文件:

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

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

为了避免这个问题,我希望使用正则表达式来提取分支名称,并在try\u files指令中使用它。因此,我将有一个由单个location指令管理的动态系统来处理所有分支

到目前为止,在try_文件中使用regex的所有尝试都会抛出405或404错误

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


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

如果使用正则表达式
位置
,则可以同时捕获路径。例如:

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

重要注意事项:将前缀
位置
更改为正则表达式
位置
将更改求值顺序。正则表达式
location
块是按顺序计算的,因此
/branchx/app/api/api.php
将匹配此
位置
,除非它位于
位置~\.php$
位置块之后。有关详细信息,请参阅。

这似乎对我不起作用。由于我还有一个子文件夹没有放在示例中进行简化:
/branch1/app/api/
我用
~^(/branchs/[^/]+/app/api)/
修改了您的示例,并用
$1/app/api.php
修改了try_文件。有什么建议吗?有很多种选择,但是如果没有看到问题所在,就很难提出具体的建议。你应该考虑编辑你的问题,改进你的例子。我已经澄清了这个问题。关于位置,我刚刚添加了
app
子文件夹。对不起,我误解了你最初的评论。我以为你的编辑会更广泛。我在答案中添加了一个注释,我怀疑您需要将
位置
块移动到
位置~\.php$
位置块下方。将位置块移动到
位置~\.php$
块下方后,所有操作都正常!
location ~ ^(/branches/[^/]+/app/api)/ {
    try_files $uri $uri/ $1/api.php$is_args$args;
}