nginx 子目录通配符重写

nginx 子目录通配符重写

我已经在我的 nginx 服务器上设置了一个服务器块,例如使用域名测试站点。我希望能够将单独的 WordPress 安装到根文件夹的直接子文件夹中,例如 /var/www/html/testsite.com/子文件夹1,/var/www/html/testsite.com/子文件夹2等等,这样他们就可以通过 testsite.com/ 访问子文件夹1, 测试站点.com/子文件夹2ETC。

创建重定向的手动方式是像这样插入它:

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

并对每个网站重复此操作。使用location /仅涵盖根目录。有没有办法创建一个(正则表达式?)通配符规则,该规则说:“对于每个直接子目录,应用此 try_files 命令”(对于 WordPress 来说,这显然总是相同的,只是文件夹名称会发生​​变化)?

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

答案1

我无法证明您想要做的事情是否可行,但下面是将您的“伪代码”转换为实际的 nginx 配置(并且假设同样的复制粘贴解决方案适合您,那么这也应该继续有效)。

location ~ /(?<anydirectsubdirectory>[^/]+) {
    index index.php;
    try_files $uri $uri/ /$anydirectsubdirectory/index.php?$args;
}

答案2

试试这个〜

server { listen 80; server_name example.com; charset utf-8; access_log logs/xxxxxx.access.log;

root   /var/www/html;

index index.php;
location = / { return 301 /cn/; }

location / {
    try_files $uri $uri/ /cn/index.php?q=$uri;
}
location /en {
    try_files $uri $uri/ /en/index.php?q=$uri;
}
location /my {
    try_files $uri $uri/ /my/index.php?q=$uri;
}
location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass   127.0.0.1:9000;
    include        fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
}

}

相关内容