Как мне заставить JSON-API Wordpress работать на сервере Nginx?
По какой-то причине "из коробки" Wordpress JSON API не работает на Nginx. Я перепробовал несколько схем перенаправления в nginx conf. Единственное, что я получил на работу, это ?json
, Однако это не работает для аутентификации и регистрации.
Как FYI, я занимаюсь разработкой приложения Cordova и пытаюсь использовать WP JSON API для бэкэнда WP.
6 ответов
Я нашел решение проблемы. Убедитесь, что постоянные ссылки работают должным образом, прежде чем предполагать (как я это сделал), что это проблема с плагином.
Мне удалось исправить постоянные ссылки для сайта WordPress в подкаталоге на сайте nginx. Эта статья поможет вам, если вы столкнетесь с той же проблемой здесь
Мой конфиг Nginx для API wp-json.
location / {
# http://v2.wp-api.org/guide/problems/#query-parameters-are-ignored
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ ^/wp-json/ {
# if permalinks not enabled
rewrite ^/wp-json/(.*?)$ /?rest_route=/$1 last;
}
В моем случае было развернуть wordpress в подкаталоге в корневом каталоге моего веб-сайта, вот шаг, чтобы заставить его работать
- Корневой каталог веб-сайта
/www/wwwroot/www.abc.com/public/
- доступ черезwww.abc.com
- Директория wordpress
/www/wwwroot/www.abc.com/public/blog/
- доступ черезwww.abc.com/blog/
- Загрузите wordpress и разархивируйте его в корневой веб-каталог, затем переименуйте его в
blog
chmod -R www:www blog
- запустите эту команду в корневом каталоге Интернета.- Добавьте следующие строки в свой файл конфигурации nginx.
location /blog/ {
index index.php;
try_files $uri $uri/ /blog/index.php?$args;
}
Если вы установили Wordpress в подкаталог, следующее решение будет работать:
location /<subdir>/ {
index index.php;
try_files $uri $uri/ /<subdir>/index.php?$args;
}
Теперь перезапустите сервер Nginx.
sudo systemctl restart nginx
Добавление следующего на мой сервер Nginx сработало как шарм.
location / {
try_files $uri $uri/ /index.php?$args;
}
После добавления проверьте конфигурацию Nginx с помощью
$ sudo nginx -t
Затем, если все в порядке, перезагрузите сервер.
$ sudo systemctl reload nginx.
Предполагая, что ваш WordPress установлен в корневом домене, это должно быть так:
#fix Woocommerce New Customer's activation link (embeded in welcome email)
rewrite ^/wp-json(.*)$ /index.php?rest_route=$1 permanent;
location / {
#Forward all request to index.php
try_files $uri $uri/ /index.php$is_args$args;
}
Обратите внимание, что правило перезаписи должно находиться за пределами
расположение {}
и над перенаправлением индекса