Регулярное выражение Nginx для обработки постоянных ссылок нескольких сайтов WordPress в / sub / directoryies - PullRequest
1 голос
/ 14 апреля 2019

Я ищу динамическое решение для обработки постоянных ссылок нескольких сайтов (узлов) 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;
}

Это заставляет домашнюю страницу этого узла загружаться так же, как и в предыдущей попытке, но показывает 404 для страниц узлов (например, https://www.domain.tld/cluster1/node1/page/) (отображается Nginx, а не WordPress).

Любая подсказка, почему ничего из вышеперечисленного не работает? Любое предложение о том, как заставить это работать?

Спасибо всем!

1 Ответ

1 голос
/ 14 апреля 2019

Вам необходимо использовать блок регулярного выражения location для захвата параметров внутреннего перенаправления в правильный обработчик index.php.Регулярное выражение location объявляется с использованием модификаторов ~ или ~*.См. этот документ для деталей.

Регулярные выражения вычисляются по порядку, поэтому location для \.php$ должно быть помещено над location, который вы вставляете.В противном случае файл PHP будет загружен вместо выполнения.

Например:

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