Nginx动态位置路径配置

Nginx动态位置路径配置,nginx,nginx-location,Nginx,Nginx Location,首先我想说的是,我对nginx相当陌生,我基本上只知道我在上周学到了什么 也就是说,我目前有一台标准配置为以下的Nginx服务器: server { listen 80; server_name site.com; root /var/www/site.com/; index index.php; location / { try_files $uri $uri/ /index.php; } location /microsite/first {

首先我想说的是,我对nginx相当陌生,我基本上只知道我在上周学到了什么

也就是说,我目前有一台标准配置为以下的Nginx服务器:

server {
  listen 80;
  server_name site.com;

  root /var/www/site.com/;
  index index.php;

  location / {
    try_files $uri $uri/ /index.php;
  }

  location /microsite/first {
    try_files $uri $uri/ /microsite/first/;
  }

  location /microsite/second {
    try_files $uri $uri/ /microsite/second/;
  }

  ...
}
这很好,尽管对于我添加到现有微站点的每个微站点,都需要添加一个新位置,以引用新微站点的路径

我的问题是:是否可以动态设置
位置
参数,使其捕获并引用microsite/目录中存在的任何子目录

e、 g.符合重写规则的东西
rewrite^(/download/*)/media/(.*)\..*$$1/mp3/$2.mp3 last
(取自nginx站点),但应用于
位置
参数,如:

location ~ ^/microsite/(.*)$ {
  try_files $uri $uri/ /microsite/$1/;
}
其中,
$1
将捕获传入的子目录名
(.*)
? (我尝试了我根据(另一个)问题的答案构建的这个片段,尽管它不起作用)

另外,我不是正则表达式专家,我在过去对它做了一些调整,但那是很久以前的事了,我不记得确切的术语,所以这可能是问题的一部分,也许

无论如何,我们非常感谢您的帮助。

提前谢谢

尝试以下几点:

location ~ ^/microsite/(?<foo>.+)$ {
    try_files $uri $uri/;
    root /microsite/$foo;
}
location~^/microsite/(?。+)${
试试_文件$uri$uri/;
root/microsite/$foo;
}

您可能需要将捕获限制在前两个路径段:

location ~ ^(/microsite/[^/]+) {
    try_files $uri $uri/ $1/;
}

[^/]
字符类匹配任何非
/

字符类。谢谢您的建议,但它不起作用。我像你写的那样尝试了
location
块,但是当尝试访问该站点时,它只会打开“保存文件”窗口(下载index.php文件,这显然是我们不想要的)。它需要放在
location~\.php$
块之后。有关
nginx
如何处理请求,请参阅。您可能希望使用
$1/index.php
,将最后一个元素显式链接到
index.php
。嘿,Richard,很抱歉缺席,但我正忙于另一个项目,刚刚回到这个问题。我只想感谢你的帮助你的建议起了作用。尽管我从nginx文档中了解到的关于
位置
块优先级的问题,我认为
位置
配置的路径越精确,作为服务器规则,它的优先级就越高!!尽管该块前面有
~
字符,所以。。无论如何,我把它放在你提到的
location~\.php$
块之后,效果很好,再次感谢=D干杯!!您对前缀位置的理解是正确的,但是,正则表达式位置是按顺序计算的,直到找到匹配项为止。同时感谢您的反馈,尽管不幸的是,它也不起作用。。共享的
位置
块返回500内部服务器错误。我对代码进行了一些处理,看看是否可以让它工作,并发现500是由
root/path/$foo
行引起的。我还尝试将
$foo
变量放在
try_files$uri$uri//path/$foo
(注释掉
根…
行)上,它只是打开了“保存文件”窗口。