У меня есть мультисайтовая установка WordPress на AWS Linux, которая работает совершенно нормально. WP Rest API также работает именно так, как и должно. Кроме одного единственного случая.
Для всего остального, включая мои собственные конечные точки и пользовательские параметры/поля, добавленные в API, всё работает прекрасно. Но как только я добавляю параметр author, он возвращает 404 на всех сайтах. Например:
/wp-json/wp/v2/posts?author_exclude=1 //это работает
/wp-json/wp/v2/posts?page=2 // это тоже работает
/wp-json/wp/v2/posts?page=2&author=abc // это также работает и возвращает недействительный автор
/wp-json/wp/v2/posts?page=2&author=1 // это возвращает 404 страница не найдена
Из некоторых других похожих вопросов я выяснил, что эта проблема может быть связана с постоянными ссылками, но я использую пользовательские постоянные ссылки
Я пробовал изменить постоянную ссылку, но это не дало никакого результата. Другим решением, которое я нашел, было заменить все deny на allow в htaccess. Я не сильно разбираюсь в htaccess, поэтому не стал его изменять, опасаясь вызвать проблемы с безопасностью. Что касается другой связанной информации, я также использую JWT и плагин отключения REST API (с включенными только конечными точками JWT).
Любая помощь была бы очень полезна, пожалуйста.
Я сталкиваюсь с такой же проблемой с Multisite, на котором работает Wordfence и JWT. Я не уверен, что решение здесь поможет в вашем случае…
Следующее не работает, возвращает 404 ответ. Если убрать data.author, всё работает без проблем.
если у нас включена 2FA, аутентификация не работает;
Я решил обе вышеупомянутые проблемы, используя пользователя редактора без 2FA и пароля приложения;
в конце концов, не имея возможности установить автора, что и привело меня к этому вопросу.
Некоторое время назад Wordfence добавил следующую опцию:
Предотвращение обнаружения имен пользователей через сканирование ‘/?author=N’, oEmbed
API, WordPress REST API и карты сайта WordPress XML
Это предотвращает запросы JSON, которые включают параметр автора.
Есть некоторая документация по этому поводу, здесь.
Ответ или решение
Проблема с возвращением кода 404 при использовании параметра author в REST API WordPress может быть связана с несколькими факторами, особенно в контексте многосайтовой установки, как в вашем случае. Давайте подробно рассмотрим возможные причины и потенциальные решения этой проблемы.
1. Влияние плагинов на функциональность API
Один из наиболее вероятных факторов, вызывающих проблему – это плагины безопасности, такие как Wordfence.
a. Блокировка пользователей
Недавно плагин Wordfence добавил опцию, предотвращающую обнаружение имен пользователей через REST API. Это включает в себя запросы, содержащие параметр author. Проверьте настройки Wordfence и убедитесь, что опция, блокирующая информацию о пользователях через REST API, отключена. Это может быть основной причиной, по которой ваш запрос с параметром author возвращает 404. Для получения дополнительной информации вы можете ознакомиться с их документацией.
2. Перманентные ссылки и конфигурация .htaccess
Хотя вы упомянули, что используете кастомные перманентные ссылки, стоит проверить конфигурацию файла .htaccess. Обычно правильная конфигурация файла .htaccess может решить множество проблем с мод rewriting и REST API.
Пример стандартных правил для WordPress в .htaccess:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Не забывайте делать резервную копию вашего .htaccess перед внесением изменений.
3. Проверка параметров авторизации
Вы отметили, что используете JWT и плагин "Disable REST API". Убедитесь, что ваш токен доступа имеет достаточные разрешения для выполнения запросов, включая операции с параметром author. Если проблема возникает только с author, возможно, вам стоит временно отключить данный плагин, чтобы протестировать, сохраняется ли проблема.
4. Тестирование без AJAX
Из описания вашей проблемы видно, что некоторые запросы через AJAX возвращают 404, тогда как другие работают нормально. Попробуйте выполнить аналогичный запрос с author не через AJAX, а непосредственно через curl или Postman, чтобы исключить возможность ошибок, связанных с AJAX-запросами или с настройками безопасности в браузере.
5. Последствия для безопасности
Если вы собираетесь изменить конфигурации плагинов безопасности или .htaccess, учитывайте, что это может повлечь дополнительные риски. Убедитесь, что изменения не нарушают безопасность вашего сайта.
Заключение
Соблюдение вышеуказанных рекомендаций позволит вам диагностировать и, возможно, устранить проблему с возвращением 404 кода. Это может быть связано как с конфигурациями плагинов безопасности, так и с правилами маршрутизации в файле .htaccess. Проведите детальный анализ текущих настроек вашего WordPress, используя предлагаемые шаги, и, при необходимости, обращайтесь за поддержкой к разработчикам плагинов, если не удастся решить проблему самостоятельно.