Nginx位置正则表达式可处理/ sub / directories中的多个WordPress网站的永久链接

时间:2019-04-14 00:34:51

标签: regex wordpress nginx nginx-location nginx-config

我正在寻找一种动态解决方案,以处理子目录中安装的多个WordPress网站(节点)的永久链接。

可以使用这样的URL来访问网站(我使用clusternode来表示结构,但是每种情况下它们都是不同的,但是它们始终遵循相同的结构,并且节点是包含WordPress根文件的目录):

https://www.domain.tld/cluster1/node1/

我想要避免的是像这样在每个节点上创建一条规则:

location /cluster1/node1/ {
    try_files $uri $uri/ /cluster1/node1/index.php$is_args$args;
}

location /cluster2/node2/ {
    try_files $uri $uri/ /cluster2/node2/index.php$is_args$args;
}

location /cluster3/node3/ {
    try_files $uri $uri/ /cluster3/node3/index.php$is_args$args;
}

location /cluster4/node4/ {
    try_files $uri $uri/ /cluster4/node4/index.php$is_args$args;
}

可以,但是有43个以上的节点(不断变化)。因此,我尝试了以下方法:

location /([^/]+)/([^/]+)/ {
    try_files $uri $uri/ /$1/$2/index.php$is_args$args;
}

正确显示主页,但显示节点页面的404(例如https://www.domain.tld/cluster1/node1/page/)(由Nginx而非WordPress呈现)。

location ~ ^/([^/]+)/([^/]+)/ {
    try_files $uri $uri/ /$1/$2/index.php$is_args$args;
}

但这会使PHP文件作为名为download的文件下载。

location ~ /([^/]+)/([^/]+)/ {
    try_files $uri $uri/ /$1/$2/index.php$is_args$args;
}

与先前相同。

location ^~ /([^/]+)/([^/]+)/ {
    try_files $uri $uri/ /$1/$2/index.php$is_args$args;
}

这使得该节点的 homepage 下载与先前的尝试相同,但是显示节点页面的404(例如https://www.domain.tld/cluster1/node1/page/)(由Nginx而非WordPress呈现)

以上任何一项都不起作用的任何线索?关于如何使其工作有任何建议吗?

谢谢大家!

1 个答案:

答案 0 :(得分:1)

您需要使用正则表达式location块来捕获内部重定向到正确的index.php处理程序的参数。正则表达式location使用~~*修饰符声明。有关详情,请参见this document

正则表达式是按顺序求值的,因此location的{​​{1}} 必须放在要插入的\.php$上方。否则,将下载PHP文件,而不执行该文件。

例如:

location