我正在寻找一种动态解决方案,以处理子目录中安装的多个WordPress网站(节点)的永久链接。
可以使用这样的URL来访问网站(我使用cluster
和node
来表示结构,但是每种情况下它们都是不同的,但是它们始终遵循相同的结构,并且节点是包含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呈现)
以上任何一项都不起作用的任何线索?关于如何使其工作有任何建议吗?
谢谢大家!
答案 0 :(得分:1)
您需要使用正则表达式location
块来捕获内部重定向到正确的index.php
处理程序的参数。正则表达式location
使用~
或~*
修饰符声明。有关详情,请参见this document。
正则表达式是按顺序求值的,因此location
的{{1}} 必须放在要插入的\.php$
上方。否则,将下载PHP文件,而不执行该文件。
例如:
location