上文说到最近给周良博客换了 zlbk.net 域名,服务器迁移到了阿里云 ECS 杭州。文件数据迁移、部署新服务器环境、Https 证书部署、老域名 301、静态文件上阿里云 OSS 等流程基本轻车熟路。整个过程没出什么问题,返倒是网站上线后遇到一个奇怪的问题。
WordPress 居然不能正确识别错误网页跳转到 404 页面了。
这个大概的表现情况就是:
- 访问 https://zlbk.net/404/ 这个无内容页面,正常逻辑上是跳转 ng 设置或者 WordPress 主题自带的 404 页面,但实际情况这个页面居然直接显示了博客首页的内容。
- 而访问 https://zlbk.net/404.html 这个 URL,可以正常识别无效页面,显示为 404 页面。
懵逼不懵逼?也就是说,博客所有 URL 不为 .html 结尾的 404 页面,打开后全部都会显示博客首页内容,这个事情体验太差了。
记录一下我的问题排查过程,可能你没有遇到问题,但这个一步步控制变量、提出假设验证假设的排查逻辑方法说不对你有用。
最初步的猜测可能是主题有问题:换一个已知没问题主题进行测试。因为我手上有两个博客,都换成相同主题,实测 WordPress 主题没问题,排除该原因。
既然是跳转问题,猜测可能是 Nginx 配置文件规则写错了。查看 WordPress Nginx 配置文档说明,对比后后确认规则无误,可排除规则引起问题。
但不能完全排除 Nginx 无问题,我又将将相同规则的 nginx 应用于另外站点,也未发现问题。再确定两个站对比变量是否一致,发现阿里云上挂了两个站,测试 VPS 上只有一个站,抱着试一试的心态,去测试服务器上又挂了一个站。
问题复现,那基本可以确认问题出在 Nginx 配置文件上。
本身我对 Nginx 不会做频繁更改,一直就只会写那么几个固定的规则。所以选择了求助大牛这条路。因为服务器环境是用 LNMP 搭建的,所以找了 LNMP 一键安装包的作者@军哥 咨询。说明遇到的问题、当前的排查方法和对应结果。
最后猜测是 Nginx 配置中开启了 pathinfo 导致。
/usr/local/nginx/conf
目录。include enable-php-pathinfo.conf;
include enable-php.conf;
service nginx restart
重启 Nginx。改文章 解决 WordPress 错误页面无法正确识别为 404 页面问题 首发自 周良博客.