Как настроить Nginx для загрузки сайта wordpress в подпапке? (для вызовов api)

Моя структура каталогов проекта следующая:

/ var / www / mysite / бэкэнд / frontend /

, где frontend / содержит простые файлы html и js, а backend / - это сайт wordpress. Я предоставляю данные wordpress конечной точке REST api для внешнего интерфейса.

Я хочу, чтобы mysite.com показывал файлы html / js, и все вызовы REST api выполнялись на mysite.com/api , которые являются файлы сайта wordpress. (так что mysite.com/api/wp-admin также будет работать в обычном режиме.)

У меня проблемы с настройкой nginx, чтобы это стало возможным. Это моя текущая конфигурация:

server {
  listen                *:80;

  server_name           mysite.com www.mysite.com;

  access_log            /var/log/nginx/mysite.access.log;
  error_log             /var/log/nginx/mysite.error.log;

  root  /var/www/mysite/frontend;

  location / {
    index  index.html index.htm index.php;
  }

location ^~ /api {
    root /var/www/mysite/backend;

    index index.php;
    try_files $uri $uri/ /../backend/index.php?$args;

    location ~ \.php$ {
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

      # With php5-cgi alone:
      fastcgi_pass 127.0.0.1:9000;
      # With php5-fpm:
      #fastcgi_pass unix:/var/run/php5-fpm.sock;
      fastcgi_index index.php;
      include fastcgi_params;
    }
}

  sendfile off;
}

Это просто загружает файл index.php из wordpress, когда я пытаюсь получить доступ к URL-адресу mysite.com/api. Любая помощь приветствуется, спасибо.

-1
задан 16 April 2017 в 03:27
2 ответа

Основная проблема заключается в том, что ваша конфигурация предполагает, что WordPress установлен по адресу / var / www / mysite / backend / api . При использовании директивы root префикс URI всегда является частью локального пути.

Используйте директиву alias , чтобы удалить элемент / api из имени пути . Например:

location ^~ /api {
    alias /var/www/mysite/backend;

    index index.php;
    if (!-e $request_filename) { rewrite ^ /api/index.php last; }

    location ~ \.php$ {
        if (!-f $request_filename) { return 404; }

        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_pass 127.0.0.1:9000;
    }
}

Мы избегаем использования try_files с псевдонимом из-за этой давней проблемы . См. это предупреждение об использовании , если

0
ответ дан 5 December 2019 в 20:25

Для WP в подпапке можно выполнить следующие действия:

    location /backend {
            rewrite ^(/[^/]+)?(/wp-.*) /backend/$2 break;
            rewrite ^/backend/(.*)$ /backend/index.php?q=$1 last;
    }
0
ответ дан 5 December 2019 в 20:25

Теги

Похожие вопросы