it-swarm.com.ru

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-плагин 2.0-бета9
  • Apache 2.2.22
  • Ubuntu 12.04.5

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

18
dsal1951

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

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

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

Если отображается ошибка 404, то сначала обновляются постоянные ссылки (см. Раздел «Постраничная навигация не работает»)

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

a2enmod rewrite
Sudo service Apache2 restart

Installation

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

Если вы до 4.7:

  1. Скачать плагин можно здесь: http://v2.wp-api.org/

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

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

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

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

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

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

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

19
dlaub3

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

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

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

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

Это сделало трюк!

12
dsal1951

В 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
12
Andy Roberts

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

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

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

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

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

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

  3. Заменить все регистры с AllowOverride None на AllowOverride All.

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

1
Patriotic

Я переместил установку 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
0
mrtnmgs