Nginx 动态位置路径配置

标签 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/;
  }

  ...
}

这工作正常,尽管对于我添加到现有站点的每个微型站点,它需要添加一个新的位置,指的是新微型站点的路径。

我的问题是:是否可以动态设置 location参数以捕获和引用 中存在的任何子目录的方式微型网站/目录?

例如符合重写规则的东西 rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last; (取自 nginx 站点)但适用于 location参数,如:
location ~ ^/microsite/(.*)$ {
  try_files $uri $uri/ /microsite/$1/;
}

其中$1将捕获在 (.*) 中传递的子目录名称?
(我尝试了我引用(另一个)Nginx dynamic location configuration 问题的答案构建的这个片段,尽管它不起作用)

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

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

最佳答案

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

location ~ ^(/microsite/[^/]+) {
    try_files $uri $uri/ $1/;
}
[^/]字符类匹配任何不是 / 的东西

关于Nginx 动态位置路径配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41065397/

相关文章:

nginx - if 条件在 nginxconf 中的 location block 内如何工作?

php - NGINX - 在多个目录中查找 .php 文件,然后执行它

javascript - 我需要nodejs还是只能依赖Nginx?

javascript - 如何在Windows 8上设置nodejs + nginx

angularjs - Nginx Cors设置在Docker容器中不起作用

regex - 如果请求 URI 不包含某些单词,如何在 nginx 中重定向

configuration - 在 nginx 的配置中, "if (!-f $request_filename) {"是否会导致虚拟机的性能下降?

deployment - Nginx Recipe v 2.0.0 : Cookbook http_gzip_static_module not found

authentication - Jenkins/Nginx - 两次提示基本身份验证,为什么?为什么有内部 Jenkins 身份验证?