Wordpress REST API (wp-api) 404 Ошибка

Я использую WP-API плагинов Wordpress REST в течение нескольких месяцев, разрабатывая локально с XAMPP. Недавно я перенес свой сайт в экземпляр EC2, и все работает отлично кроме. Теперь я получаю сообщение 404 со следующим сообщением, когда я пытаюсь получить доступ к любой конечной точке в API:

Запрошенный URL/wordpress/wp-json/не найден на этом сервере

Довольно постоянные ссылки включены со следующей структурой http://.../wordpress/sample-post/, которая отлично работает при навигации к определенной записи в браузере.

Вот некоторые подробности о моей настройке:

  • Wordpress 4.4.1
    • Не многопользовательский
  • WP REST API plug-in 2.0-beta9
  • Apache 2.2.22
  • Ubuntu 12.04.5

Любая помощь будет очень признательна, поскольку я прошел через SO и форумы поддержки WP в течение нескольких часов, и я не в идеях. Спасибо!

Ответ 1

ОБНОВЛЕННЫЙ НОВЫЙ ПУТЬ

Я также столкнулся с аналогичной проблемой в локальном проекте. Я использовал index.php после моего URL-адреса проекта, и он работал.

http://localhost/myproject/index.php/wp-json/wp/v2/posts

Если он отображает ошибку 404, тогда обновить permalinks вначале (см. раздел "Погоревшая навигация не работает"

Если это работает, возможно, вам нужно включить mod_rewrite, на ubuntu:

a2enmod rewrite
sudo service apache2 restart

Установка

API REST включен в WordPress 4.7! Плагины больше не нужны, просто установите последнюю версию WordPress, и вы готовы к работе.

Если вы до 4.7:

  • Загрузите плагин отсюда: http://v2.wp-api.org/

  • установить и активировать его.

Использование

Чтобы получить все сообщения:

www.mysite.com/wp-json/wp/v2/posts

Для функции поиска поиск тестового сообщения выглядит следующим образом:

/wp-json/wp/v2/posts?filter[s]=test

Ответ 2

У меня была эта проблема с последним WordPress 4.7+. В моем случае REST API работал только после того, как я изменил настройку постоянных ссылок на нечто иное, чем "Обычное", которое было настройкой по умолчанию для моей установки.

Ответ 3

В WPEngine и WP 4.9.2 мне нужно было только обновить постоянные ссылки, чтобы получить новый, только что установленный сайт, чтобы он возвращал вызовы API v2. Что я сделал:

  1. Создать сайт
  2. Перейдите по адресу http://yoursitename.wpengine.com/wp-json/wp/v2/posts.
    • получить 404
  3. Зайдите в админ, настройки, постоянные ссылки, выберите "Название сообщения"
  4. Нажмите "Сохранить изменения"
  5. Перейдите по адресу http://yoursitename.wpengine.com/wp-json/wp/v2/posts.
    • успех. страница отображает ответ JSON

Ответ 4

Это оказалось проблемой с конфигурацией Apache.

Сначала я удалил файл .htaccess в корневом каталоге wordpress.

Затем я перешел к /etc/apache2/sites-enabled и открыл 000-default

Все переменные AllowOverride были установлены в None, которые я заменил на All.

Это трюк!

Ответ 5

Мне пришлось вручную создать .htaccess, установить его на chmod 664 и скопировать в него правила permalink.

Я также играл с

  • Настройки > Постоянная ссылка
  • Вручную обновить .htaccess через код в нижней части страницы постоянных ссылок после нажатия "Сохранить"
  • Добавление "index.php" в качестве одного из других ответов предполагает
  • Убедитесь, что mod rewrite включен с помощью a2enmod

Ответ 6

Это файл разрешения ошибка, примените следующее решение:

Редактировать этот файл /etc/apache2/apache2.conf Измените разрешения /var/www/ с "Нет" на "Все" Перезагрузите сервер apache2.

Ответ 7

Я решил эту проблему с помощью следующих шагов:

  1. Перейдите к.. \Apache24\conf\httpd.conf и найдите LoadModule rewrite_module modules/mod_rewrite.so.

  2. Включите модуль перезаписи, удалив знак #.

  3. Замените все случаи AllowOverride None на AllowOverride All.

  4. Не забудьте перезапустить сервер Apache. :)

Ответ 8

Я столкнулся с той же проблемой, когда перенес свой сайт из cPanel в инстанс Google Cloud Compute Engine; проблема была в правах доступа к файлам, которые изначально были вызваны различием версий PHP текущего развертывания от предыдущего развертывания.

Вот исправление Как устранить ошибку GCP WordPress " Эта страница не работает example.com в настоящее время не может обработать этот запрос. HTTP ERROR 500

Ответ 9

Я переместил установку WordPress из подкаталога в другой, поэтому в моем случае проблема была связана с конфигурацией WordPress в файлах .htaccess. Он пытался перенаправить каждую страницу, кроме домашней страницы, в старый каталог. Это было просто вопрос обновления olddir до newdir... Это сбило меня с толку не раз, поэтому я решил поставить его здесь...

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /olddir/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /olddir/index.php [L]
</IfModule>

# END WordPress

Ответ 10

Я обнаружил, что mysite/wp-json/ не работал, но mysite/?rest_route=/ был нормальным. Это нарушало некоторые, но не все функции REST API, используемые на моем сайте.

Ответом на это стало недавнее изменение того, как я работал на своем сервере. Это нарушило REST API, но это не было очевидно до позднего времени.

Я изменил этот домен с использования Apache на использование nginx, и я неправильно перенес настройки .htaccess. Поэтому быстрое решение этой проблемы - вернуться к использованию Apache. Это немедленно восстановило работоспособность сайта.

Я буду менять этот домен обратно на nginx в будущем, но когда я это сделаю, я протестирую его и буду осторожен, чтобы не повлиять на REST API.