Nginx动态位置路径配置

时间:2016-12-09 17:02:08

标签: 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 {
    try_files $uri $uri/ /microsite/first/;
  }

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

  ...
}

这很好用,但是对于我添加到现有的每个微型网站,它需要添加一个新的位置来引用新微型网站的路径。 / p>

我的问题是:是否可以以捕获的方式动态设置location参数,并引用 microsite / 目录?

e.g。重写规则rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;(取自nginx网站)的内容,但应用于location参数,如:

location ~ ^/microsite/(.*)$ {
  try_files $uri $uri/ /microsite/$1/;
}

$1会捕获(.*)中传递的子目录名吗? (我尝试了这个我建立的片段,引用了(另一个)Nginx dynamic location configuration问题的答案,虽然它不起作用)

此外,我还不是一名正则表达专家,我过去曾对它进行过一些调整,但是不久之前,我不记得确切的术语,所以这可能是其中的一部分问题,也许?!

无论如何,所有的帮助都表示赞赏 在此先感谢!!

2 个答案:

答案 0 :(得分:3)

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

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

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

的字符

答案 1 :(得分:0)

尝试以下方面的内容:

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