By烟花易冷

新版 WordPress 在 lighttpd 下无法完成发布/更新操作的解决记录
2020-02-08

大约是去年十一月,博客原本放置的 namecheap 主机过期,我又沉迷于实习(加班),便把 wordpress 转移到了 virmach 一台配置极低、性能极差、延迟极高的廉价 vps 上。由于 virmach 这个主机商为了防止廉价 vps 被滥用,对资源占用有着比较严苛的要求,我便选用了 lighttpd + php7-fpm 的搭配来运行 WordPress,一切倒还顺利,直至昨天,我准备更新“关于”页面时,频频出错。

在审查元素中,可以观察到前端正在不断对 /wp-json/* 发起请求,而该路径对应的是 WordPress 自带的 REST API 功能,通过观察请求可以发现在 WordPress 5 的新编辑器在实现自动保存草稿、更新、发布功能时,已经转为直接对 Rest API 发起请求来实现,而这批 404 便是“罪魁祸首”。

面对这个问题,首先联想到的便是 lighttpd 的 rewrite (伪静态)规则,目前这段规则是我很久以前玩极限配置搭建 WordPress 环境时验证过的,在我高中时期的博文中也有对其详细的介绍,如今不起作用应该是漏了某个条件。于是我对几个路径进行了尝试,发现拼接 /index.php/wp-json/** 后,可以正常获取 WordPress Rest API 的数据。检查目前 lighttpd 的配置,果然..

通过对比后发现是老的伪静态规则中,/wp-json 的路径将会命中图中第一条,以真实路径访问文件(即$0)

找出问题那么正常添加一条新的规则即可,完整的伪静态配置如下:

url.rewrite = (
	"^/wp-json/(.+)?" => "/index.php/wp-json/$1",
	"^/(wp-.+).*/?" => "$0",
	"^/(sitemap.xml)" => "$",
	"^/(xmlrpc.php)" => "$0",
	"^/(.+)/?$" => "/index.php/$1"
)

后记

虽然把博客搬到了一台廉价的低配置 VPS,但是为了访问速度为其加上了 阿里云CDN,算起来 CDN 的成本比服务器本身还贵。

随后,嗯,这是一篇水文。目前新型冠状病毒(2019-nCoV)疫情不乐观,足不出户将大半个月了甚是无聊,除了毕业设计便是煲电视剧,不过没有那次春天是不会到来的,据说我华农的花海今年已格外灿烂,孤芳无人赏,只盼疫情早日被战胜,方得出门感受春的气息,以及…面对残酷的春招..