我有以下工作虚拟主机配置:
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/dir3,example.com/dir4,example.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;
}
把这个方块移到其他方块上面就可以解决问题了。我不知道背后的原因,但无论如何问题解决了。