本文记录了 WordPress 站点修改固定链接格式后,出现无效 JSON 提示和文章 404 问题的详细解决过程。
前言
WordPress 站点修改固定链接格式后,保存文章或发布文章时会出现 发布失败。 此响应不是合法的JSON响应 提示。
此外还会导致原先已经发布的文章进入正文时出现 404 页面。
排除了 WordPress 编辑器、主题、插件等方面的问题后,定位到了 WordPress 网页的伪静态问题。
WordPress 版本 : 6.4.3
Nginx 版本 : nginx/1.25.4
文中使用的是腾讯云 Linux 服务器,系统镜像为 CentOS 7.6 的版本。
文中使用的命令均为 root
用户执行。
解决方式
以下提供了两种解决方式,建议选择方式一。
方式一(推荐)
此方式使用 try_files 指令来设置 WordPress 网站的伪静态。
- 编辑 Nginx 的默认配置文件
/etc/nginx/conf.d/default.conf
vi /etc/nginx/conf.d/default.conf
- 将以下代码块内容复制并粘贴至
/etc/nginx/conf.d/default.conf
文件的server
块中,保存后退出location / { index index.php index.html index.htm; try_files $uri $uri/ /index.php$is_args$args; } rewrite /wp-admin$ $scheme://$host$uri/ permanent;
- 如果 WordPress 网站安装在子目录例如
/wordpress/
目录下,则需要作如下调整:location /wordpress/ { index index.php index.html index.htm; try_files $uri $uri/ /wordpress/index.php$is_args$args; } rewrite /wp-admin$ $scheme://$host$uri/ permanent;
- 如果 WordPress 网站安装在子目录例如
- 使用命令
nginx -t
验证 Nginx 的配置文件是否有问题nginx -t
- 以下为命令执行的正常结果
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
- 以下为命令执行的正常结果
- 最后重新载入 Nginx 服务即可
systemctl reload nginx
方式二
此方式使用 if 语句来设置 WordPress 网站的伪静态。
-
编辑 Nginx 的默认配置文件
/etc/nginx/conf.d/default.conf
vi /etc/nginx/conf.d/default.conf
-
将以下代码块内容复制并粘贴至
/etc/nginx/conf.d/default.conf
文件的server
块中,保存后退出location / { index index.php index.html index.htm; if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; } if (-f $request_filename/index.php){ rewrite (.*) $1/index.php; } if (!-f $request_filename){ rewrite (.*) /index.php; } } rewrite /wp-admin$ $scheme://$host$uri/ permanent;
- 如果 WordPress 网站安装在子目录例如
/wordpress/
目录下,则需要作如下调整:location /wordpress/ { index index.php index.html index.htm; if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; } if (-f $request_filename/index.php){ rewrite (.*) $1/index.php; } if (!-f $request_filename){ rewrite (.*) /wordpress/index.php; } } rewrite /wp-admin$ $scheme://$host$uri/ permanent;
- 如果 WordPress 网站安装在子目录例如
-
使用命令
nginx -t
验证 Nginx 的配置文件是否有问题nginx -t
- 以下为命令执行的正常结果
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
- 以下为命令执行的正常结果
-
最后重新载入 Nginx 服务即可
systemctl reload nginx
总结
两种方式各有优劣,但如果只是用于 WordPress 网站的伪静态设置,我更倾向于使用 try_files 指令。
相对来说, try_files 指令会比 if 语句更高效,但是对于流量不高的网站(比如我的网站),两者用不出差别。
特别注意,如果 WordPress 网站安装在子目录下,则需要注意配置中的重定向路径是否正确。