WordPress 解决固定链接造成的文章 404 问题

本文记录了 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 网站的伪静态。

  1. 编辑 Nginx 的默认配置文件 /etc/nginx/conf.d/default.conf
    vi /etc/nginx/conf.d/default.conf
    
  2. 将以下代码块内容复制并粘贴至 /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;
      
  3. 使用命令 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
      
  4. 最后重新载入 Nginx 服务即可
    systemctl reload nginx
    

方式二

此方式使用 if 语句来设置 WordPress 网站的伪静态。

  1. 编辑 Nginx 的默认配置文件 /etc/nginx/conf.d/default.conf

    vi /etc/nginx/conf.d/default.conf
    
  2. 将以下代码块内容复制并粘贴至 /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;
      
  3. 使用命令 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
      
  4. 最后重新载入 Nginx 服务即可

    systemctl reload nginx
    

总结

两种方式各有优劣,但如果只是用于 WordPress 网站的伪静态设置,我更倾向于使用 try_files 指令。

相对来说, try_files 指令会比 if 语句更高效,但是对于流量不高的网站(比如我的网站),两者用不出差别。

特别注意,如果 WordPress 网站安装在子目录下,则需要注意配置中的重定向路径是否正确。

参考链接

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇