Nginx: размещение нескольких сайтов WordPress в качестве подкаталогов возвращает 404 страницы

#wordpress #nginx

Вопрос:

У меня есть корневой сайт не wordpress, который имеет 2 поддомена (/блог и /магазин) в виде отдельных сайтов wordpress с отдельными базами данных. Мне удалось настроить для них отдельные базы данных mysql, и загрузка корневых страниц (т. Е. /блог или /магазин) и любой страницы в их соответствующих wp-администраторах также работает.

Однако загрузка любой другой страницы (например, /блог/статья 1 или /магазин/товар4), которая не является корневой страницей /блога или /магазина, возвращает страницу с ошибкой 404.

Почему это происходит и как это можно исправить?

Вот мой файл .conf в /etc/nginx/сайты доступны (также с символической ссылкой на /сайты включены):

 upstream wp-php-handler-four {
        server unix:/var/run/php/php7.4-fpm.sock;
}
server {
    listen 1224 default_server;
    listen [::]:1224 default_server;

    root /var/www/ecpn_sites;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html index.php;

    server_name _;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }

    location /blog {
        try_files $uri $uri/ /index.php?$args;
    }
    location /shop {
        try_files $uri $uri/ /index.php?$args;
    }
    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass wp-php-handler-four;
    }
}
 

Я пытался изменить location ~ .php$ location ~ /blog.php$ , добавить index.php внутри блоков /блог и /магазин и изменить ?$args ?q=$uriamp;$args , но безрезультатно.

Любая помощь будет признательна, так как я новичок в Nginx. Спасибо.

Комментарии:

1. Последним параметром ваших try_files утверждений должно быть /blog/index.php?$args и /shop/index.php?$args .

2. Спасибо — это сработало

Ответ №1:

Измените try_files на:

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

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