搜索全站
网站迁移 8 分钟阅读

WordPress网站迁移后所有文章变404,固定链接失效怎么修复

网站迁移到新主机后首页正常,但所有文章、分类、标签页全部返回404,固定链接直接失效。本文讲清伪静态规则丢失的原理,用重存固定链接、补全.htaccess、配置Nginx的try_files三步操作恢复内页访问,并附数据库修正方法,帮你彻底解决迁移后404问题。

U
UFO_PF 2026-10-10 · 阅读 8 分钟
Wo 网站迁移
阅读提示
本文约 3,021 字,预计阅读 8 分钟。文中命令与配置均经过实测,可直接参考执行。

引言

你辛辛苦苦把 WordPress 站点从旧主机搬到新服务器,首页能正常打开,可点进任何一篇文章、分类页、标签页,全都是「404 Not Found」,百度收录的链接一打开也是空白页或者找不到。更让人抓狂的是,进了后台去「设置 → 固定链接」看,选项明明还停在「文章名」上,可前台就是死活打不开内页。这几乎是迁移新手遇到的第一个大坑,尤其是从虚拟主机换到新服务商、或者从 Win 服务器换到宝塔 Linux 面板的时候。

这个现象在根目录文件没有正常迁移、或者新服务器没开启伪静态(rewrite)时高发。别慌,这类 404 绝大多数不是数据丢了,而是「告诉服务器怎么把网址翻译成文章」的那条规则丢了。本文会用最直白的方式,带你一步步把内页找回来。

故障原因分析

WordPress 的内页链接默认不是真实存在的文件,而是靠一条叫「伪静态规则」(rewrite rule)的东西临时生成的。理解下面几点,你就明白 404 从哪来了。

  1. 固定链接规则没有迁移过去。 Apache 环境下,规则写在网站根目录的 .htaccess 文件里。很多人迁移时只打包了 wp-content 和数据库,忘了这个隐藏文件,或者新主机根本不支持 .htaccess,于是服务器收到 /hello-world 这样的请求时找不到对应文件,直接抛 404。
  1. 新服务器没有开启 rewrite 模块。 Nginx 本身不自带 .htaccess 解析能力,它需要用 try_files 指令把找不到的路径转交给 index.php 处理。如果站点配置里缺了这段,所有非真实文件路径都会 404。
  1. 固定链接选项虽然显示没变,但数据库里的 rewrite 规则缓存失效了。 WordPress 把 rewrite_rules 存在 wp_options 表里,迁移过程中如果序列化数据被破坏或规则过期,前台就不会按预期跳转。
  1. 默认链接是「朴素」模式。 有些迁移后系统自动回落到 ?p=123 的朴素形式,此时内页其实是能开的,只是你访问的还是旧的文章名链接,自然 404。
  1. 网站地址配置错误连带影响。 wp_options 里的 home 和 siteurl 如果没改,生成的链接还指向旧域名,点进去当然找不到。

分步解决方案

先做一个判断:如果后台「设置 → 固定链接」里选的是「朴素」,那内页应该用 你的域名/?p=文章ID 能打开,这说明伪静态没生效;如果连朴素都打不开,优先查 home 和 siteurl 两项(见方法三)。

方法一:重建固定链接规则(最快,先试这个)

很多情况下数据库里的规则只是失效,重新保存一次就能自动重建。操作步骤:

  1. 登录 WordPress 后台,进入「设置 → 固定链接」。
  2. 先把当前选项切到「朴素」,点「保存更改」。
  3. 再切回你想要的「文章名」或「自定义结构」,比如 /%postname%/,再点一次「保存更改」。

这一步会强制 WordPress 重新生成 rewrite_rules 并写入缓存。做完后刷新前台文章页,如果好了,说明只是规则失效。

方法二:补上 Apache 的 .htaccess 文件

如果方法一无效果,且你的服务器是 Apache(宝塔、cPanel 常见),去网站根目录检查是否缺少 .htaccess。把下面这段完整粘贴进去:

# 文件路径:网站根目录/.htaccess
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

注意:如果你把 WordPress 装在子目录里,RewriteBase 和最后一行要改成对应的子目录路径。

方法三:配置 Nginx 的伪静态规则

如果你的服务器是 Nginx(宝塔默认就是 Nginx),不用 .htaccess,要去站点配置里加规则。在宝塔面板里,点站点「设置 → 伪静态」,选择 wordpress,或者手动填入:

location / {
    try_files $uri $uri/ /index.php?$args;
}

一小段 try_files 就能让 Nginx 把找不到的路径交给 index.php 处理。

方法四:检查并修正网站地址

如果链接点进去指向的域名不对,需要在数据库里修正。用 phpMyAdmin 或宝塔的数据库管理,执行以下 SQL(注意把表前缀 wp_ 和域名换成你自己的):

-- 查看当前配置
SELECT option_name, option_value FROM wp_options WHERE option_name IN ('home','siteurl');

-- 修正为新的域名(含协议)
UPDATE wp_options SET option_value = 'https://www.xinyuming.com' WHERE option_name = 'siteurl';
UPDATE wp_options SET option_value = 'https://www.xinyuming.com' WHERE option_name = 'home';

改完后,一定要回到「设置 → 固定链接」重新保存一次,让规则与新域名同步。

常见踩坑点

  • 忘了 .htaccess 是隐藏文件。 用 FTP 工具时默认不显示点号开头的文件,需要手动开启「显示隐藏文件」再下载,否则永远找不到它。
  • Nginx 环境却照抄 .htaccess。 两个 Web 服务器规则不通用,Nginx 服务器放 .htaccess 完全没用,必须改站点伪静态配置。
  • 固定链接只保存一次。 切换后没点「保存更改」按钮,规则不会重建,白忙一场。
  • 子目录安装却用了根目录规则。 RewriteBase 写成 / 会导致二级目录站点全部 404,要改成 /子目录名/。
  • 改数据库没换表前缀。 有些站迁移后前缀不是 wp_,SQL 里要写对,否则报「表不存在」。
  • 服务器权限问题。 .htaccess 文件权限设置不当或包含语法错误,Apache 会直接 500,先临时删除它看首页是否恢复,以定位问题。

总结

WordPress 迁移后出现文章 404,本质上是「网址翻译规则」断了,而不是数据丢失,所以在解决思路上要优先排查伪静态,而不是急着重装。标准动作是:先在后台「设置 → 固定链接」重新保存一次,再确认 Apache 的 .htaccess 或 Nginx 的 try_files 规则是否齐全,最后核对数据库里的 home 和 siteurl 是否已改成新域名。按这四步走下来,绝大多数 WordPress 迁移后 404 的问题都能在十分钟内解决。搞定后别忘了用百度站长平台提交一下新链接,让搜索引擎尽快重新抓取,收录才不会掉。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。