nginx 位置块中的通配符子目录

nginx 位置块中的通配符子目录

我有以下工作虚拟主机配置:

server {
listen       443 ssl http2;
server_name  example.com;
root  /home/sites/example.com/html; #main dir for main site domain
index index.php index.html index.htm;

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

}

然后我想有这种结构的子网站example.com/sub1,但为了有条理,我不希望 sub1 在/home/sites/example.com/html.我宁愿它/home/sites/example.com/subsites所以我添加了这个位置块,它就起作用了

location /sub1/ {
  root  /home/sites/example.com/subsites;
  ....
}

这里的问题是,如果我想创建另一个子网站,我必须复制此块并进行一些更改。例如,对于sub2,我必须创建一个目录名称sub2/home/sites/example.com/subsites然后添加如下位置块:

location /sub2/ {
   root  /home/sites/example.com/subsites;
    ....
}

我可以通过以下方式访问example.com/sub2

我想创建一个具有正则表达式匹配的位置,以便每次我在/home/sites/example.com/subsites(dir3、dir4、dir5、… dirN),以便可以通过以下方式访问这些新创建的目录example.com/dir3example.com/dir4example.com/dir5,...example.com/dirN 我已经尝试使用此块,nginx 重新启动正常,但我无法访问新创建的目录,并且只收到 404 错误

location ~* "/dir([0-9]{1,4})/" {
root  /home/sites/example.com/subsites;
}

答案1

我想这是一个奇怪的问题。我的.conf文件中有这些块:

location ~* /\.well-known {
    allow all;
}

location ~* /\. {
    deny all;
}

location ~* /(?:uploads|files)/.*\.php$ {
    deny all;
}

location ~* \.(jpg|jpeg|gif|png|css|js|swf|ico|pdf|svg|eot|ttf|woff)$ {
    expires 60d;
    access_log off;
}

当我把这个块放在那些块后面并访问example.com/dir3dir3(在创建目录后/home/sites/example.com/subsites,显示 404 页面。

location ~* "/dir([0-9]{1,4})/" {
root  /home/sites/example.com/subsites;
}

把这个方块移到其他方块上面就可以解决问题了。我不知道背后的原因,但无论如何问题解决了。

相关内容