Моя структура каталогов проекта следующая:
/ 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. Любая помощь приветствуется, спасибо.
Основная проблема заключается в том, что ваша конфигурация предполагает, что 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
с псевдонимом
из-за этой давней проблемы . См. это предупреждение об использовании , если
Для WP в подпапке можно выполнить следующие действия:
location /backend {
rewrite ^(/[^/]+)?(/wp-.*) /backend/$2 break;
rewrite ^/backend/(.*)$ /backend/index.php?q=$1 last;
}