/ 技术栈 | Tech / 23 views

解决WordPress REST API错误

五一出门之前遇到了自建站问题频繁报错,遗留问题如下:

  1. 域名的主页显示403 Forbidden
  2. 所有的Page页面无法编辑,一编辑就出错误提示
  3. WP Statistics插件失效
  4. Jetpack Boost一直报错

回来之后花了点时间排查,终于逐一解决掉:

第1个问题很简单,管理员批量改各种wordpress的include的时候,不小心给根目录也加了一条规则,删掉即可,403问题不外乎是何种配置的时候没有办法识别index,就着修改的记录排查一下就好。

第2-4个问题查了一些资料发现这几个问题实际上是同一个问题:WordPress的REST API出错了。

错误提示

首先是系统的Site Health Status:

The REST API did not behave correctly.

点开Performance查看详情:

The REST API is one way that WordPress and other applications communicate with the server. For example, the block editor screen relies on the REST API to display and save your posts and pages.

The REST API did not process the context query parameter correctly.

其次是WP Statistics插件显示:

Warming: WP REST APl Connection Error Detected. Flush Rewrite Rules by Updating Permalink in settings → Permalinks and verify WP REST APl is Enabled.

明明都直接说WP REST API Error,但我被误导了一直以为是 Permalinks的问题,反正是搜索了N多方法都没什么用,WP Statistics的技术人员回复也一塌糊涂,Jetpack Boost更是,好像最近很多人都出现了报错,我看WP社区里面提问的一大堆都没解决(官方无能?),不知道是不是和我一样的问题。

解决方法一

在技术社区找到的解法,只需要在 Nginx 配置中添加如下语句:

location ~ ^/wp-json/ {
   rewrite ^/wp-json/(.*?)$ /?rest_route=/$1 last;
}

Nginx配置位于系统的/etc/nginx/sites-enabled 目录,如果用的是VPS,这里面可能有多个文件,找到和自己的Wordpress相关的那一个,在location的位置加上语句,然后重新启动 nginx 服务:systemctl restart nginx.service,搞定。

方法二

另一个方法我没有尝试,是WP官方github的用户回复:
编辑 “wp-includes/rest-api.php’ 文件的327行:rest_get_url_prefix()
删除或者注释掉:return apply_filters( 'rest_url_prefix', 'wp-json' )
添加return apply_filters( 'rest_url_prefix', '?rest_route=' );

科普:WP REST API是什么?

WordPress REST API 为应用程序提供了一个接口,通过发送和接收JSON(JavaScript 对象表示法)对象形式的数据来与您的 WordPress 站点进行交互。

默认状态下,如不禁用REST API会有以下风险:

  • 会透露WordPress站点的很多敏感信息,不利于安全。
  • 当该URL有访问,会运行WordPress的大量程序脚本。如有人不断高频率扫描该URL,甚至会导致网站运行缓慢或卡死。

常见需要使用REST API的应用是以下这些:

  • Gutenberg 块编辑器使用 REST API在页面编辑和发布编辑时进行通信。如果完全禁用它,会得到一个错误:“更新失败。”
  • Yoast SEO 和 Ryte 仪表板小部件。
  • Jetpack

文章无法编辑与REST API有关无疑,经典编辑器或者MD编辑器可以使用也理解了。还有很多其他插件也依赖它,好像很多博主为了安全会把它禁掉,我搞不太懂,先放着。

以及,虽然Jetpack修好了,但我还是把它删了,目前网站的速度应该是没什么问题,不需要它来优化。

image-20240512105612043

后续是解决流量比之前预计大,对网站和数据库有压力的问题,准备用Cloudflare的R2免费存储缓解一下图片、音频之类的访问压力,过几天再说。

(说实话,对于非技术来说debug真的好麻烦,代码什么的……但是现在有GPT实在也没有心思再学编程啊!)

搭建Hugo静态博客的踩坑小记
搭建Hugo静态博客的踩坑小记
Cloudflare R2免费博客图床
Cloudflare R2免费博客图床
一篇自建博客频繁报错的碎碎念
一篇自建博客频繁报错的碎碎念
数码产品更新换代小记
数码产品更新换代小记

2

  1. S

    恭喜解决

    1. Leche

      需要再写篇博客阐述一下这件事的程度……后续发展更加折腾了

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.