Как мне заставить 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 в подкаталоге в корневом каталоге моего веб-сайта, вот шаг, чтобы заставить его работать

  1. Корневой каталог веб-сайта /www/wwwroot/www.abc.com/public/ - доступ через www.abc.com
  2. Директория wordpress /www/wwwroot/www.abc.com/public/blog/ - доступ через www.abc.com/blog/
  3. Загрузите wordpress и разархивируйте его в корневой веб-каталог, затем переименуйте его в blog
  4. chmod -R www:www blog - запустите эту команду в корневом каталоге Интернета.
  5. Добавьте следующие строки в свой файл конфигурации 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;
}

Обратите внимание, что правило перезаписи должно находиться за пределами

расположение {}

и над перенаправлением индекса

Другие вопросы по тегам