Nginx动态定位路径配置

mfo*_*igo 6 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/;
  }

  ...
}
Run Code Online (Sandbox Code Playgroud)

这工作得很好,尽管对于我添加到现有微型站点的每个微型站点,它都需要添加一个引用新微型站点的路径的新位置。

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

例如,沿着重写规则rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;(取自 nginx 站点)但应用于location参数的某些内容,例如:

location ~ ^/microsite/(.*)$ {
  try_files $uri $uri/ /microsite/$1/;
}
Run Code Online (Sandbox Code Playgroud)

在其中$1会捕获传入的子目录名称(.*)(我尝试了参考(另一个)Nginx 动态位置配置问题的答案构建的这段代码,尽管它不起作用)

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

无论如何,感谢所有帮助。
提前致谢!!

Ric*_*ith 8

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

location ~ ^(/microsite/[^/]+) {
    try_files $uri $uri/ $1/;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 它需要放置在 `location ~ \.php$` 块之后。请参阅[本文档](http://nginx.org/en/docs/http/request_processing.html)了解“nginx”如何处理请求。您可能希望使用“$1/index.php”将最后一个元素显式链接到“index.php”。 (2认同)