WordPress更换域名所有页面404?5步避坑指南

自己不会代码想做网站,结果一换域名全站404,这种绝望感我太懂了。很多新手以为改个DNS记录就完事,结果后台进去都是空白,首页也打不开。这其实是WordPress最常见的“坑”之一。别慌,只要搞懂原理,按步骤来,十分钟就能解决。这篇避坑指南,就是专门写给非技术背景的朋友的,手把手教你怎么安全换域名,不再让404报错吓退你。

为什么WordPress换域名后会出现404错误?

很多小白用户遇到这个问题,第一反应是服务器挂了或者代码丢了。其实都不是。WordPress是一个基于数据库的动态网站程序,它不像静态网页那样,文件放在哪就在哪。当你访问 www.old-domain.com/about 时,WordPress并不是直接去硬盘里找一个叫 about 的文件,而是去数据库里查:“哦,这个路径对应的是ID为5的文章,标题是‘关于我们’”。

当你把域名从 old-domain.com 改成 new-domain.com,但数据库里存的还是 old-domain.com 的时候,WordPress在解析URL时就会出错。它发现当前请求的域名和数据库里记录的域名对不上,或者更常见的情况是,你的虚拟主机服务器配置(Apache/Nginx)只绑定了新域名的根目录,但WordPress内部的链接结构还没更新,导致请求无法被正确路由到 index.php 进行解析,服务器找不到对应的静态资源,就返回了404。

还有一个隐藏原因:Permalink(固定链接)设置问题。如果你的固定链接是“/%postname%/”这种带目录结构的,换域名后如果没同步更新,极易触发404。如果是默认的“/?p=123”格式,通常不会出现404,但SEO会挂掉。所以,404的本质是服务器路由规则与WordPress数据库记录的不匹配。

换域名前必须做的3个准备工作

在动手改任何东西之前,先停三秒。如果你直接去服务器后台改DNS,大概率会搞砸。作为过来人,我强烈建议你按这个顺序操作:

  1. 全站备份:这是底线。登录你的cPanel或宝塔面板,备份整个网站文件(FTP下载或面板备份)和数据库(MySQL导出SQL文件)。记住,文件+数据库缺一不可。万一改错了,你有得救。
  2. 新域名解析测试:先把新域名的A记录或CNAME记录指向服务器IP。用 ping new-domain.com 或者在线工具 ping.chinaz.com 测试一下,确保域名能解析到服务器。如果解析都不通,后面全白搭。
  3. 检查SSL证书:如果你之前用了HTTPS,新域名需要重新申请SSL证书(Let's Encrypt免费证书通常支持自动续期,但手动配置的需重新绑定)。否则换完域名,浏览器会报“不安全”,用户体验极差,甚至影响SEO。

很多新手忽略第三点,结果换完域名,网站能打开,但地址栏是红色的感叹号。这时候再回头搞SSL,又要折腾半天。提前把证书配置好,或者用支持自动HTTPS的面板,能省不少事。

如何正确修改WordPress数据库中的域名?

这是最核心的一步。很多人用WordPad或记事本打开SQL文件,把 old-domain.com 全局替换成 new-domain.com,然后导入。听起来很暴力有效,但风险极高。

为什么?因为数据库里的URL可能以不同形式存在:

  • http://old-domain.com
  • https://old-domain.com
  • //old-domain.com
  • 甚至某些插件存储的是纯域名 old-domain.com

如果简单粗暴替换,可能会把一些无关的字符串也改了,或者漏掉带协议头的记录。更安全的做法是使用专门的工具。

方法一:使用WordPress内置工具(推荐新手) WordPress 5.0+ 引入了 wp-cli 命令,但如果你不懂命令行,可以用插件。

  1. 在旧域名下(还能访问时),安装插件 Better Search Replace。
  2. 插件设置:
    • Search for: old-domain.com
    • Replace with: new-domain.com
    • Tables: 全选(重点注意 wp_posts 和 wp_options 表)
    • 关键步骤:先勾选“Dry Run”(试运行),查看会修改多少条数据。确认无误后,再取消勾选,执行正式替换。
  3. 替换完成后,立即刷新前台,检查首页、文章页、图片链接是否正常。

方法二:使用SQL语句(适合有一定基础者) 如果你导出了SQL文件,可以用Notepad++(不要用记事本,会改变编码)进行替换。

-- 示例:替换 wp_posts 表中的内容
UPDATE wp_posts SET post_content = REPLACE(post_content, 'old-domain.com', 'new-domain.com');
UPDATE wp_posts SET guid = REPLACE(guid, 'old-domain.com', 'new-domain.com');
UPDATE wp_posts SET post_name = REPLACE(post_name, 'old-domain.com', 'new-domain.com');-- 示例:替换 wp_options 表中的设置
UPDATE wp_options SET option_value = REPLACE(option_value, 'old-domain.com', 'new-domain.com');

注意:执行前务必修改表名前缀(如 wp_ 可能是 myblog_)。替换完导入数据库后,记得修改 wp-config.php 文件中的 WP_HOME 和 WP_SITEURL 常量,确保它们指向新域名。

修改 .htaccess 与服务器配置的注意事项

数据库改完了,如果还是404,问题通常出在服务器层面。Apache服务器依赖 .htaccess 文件来重写URL。WordPress的 .htaccess 中通常包含类似这样的规则:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

避坑重点:

  1. RewriteBase 设置:如果你的网站部署在子目录(如 www.new-domain.com/blog/),RewriteBase 必须设置为 /blog/。如果部署在根目录,则留空或设为 /。很多404是因为这里没改对。
  2. 服务器重写模块:确保Apache启用了 mod_rewrite 模块。在cPanel或宝塔面板中,检查“Apache配置”或“PHP配置”里是否开启了重写引擎。
  3. 文件权限:.htaccess 文件权限应为 644,目录权限为 755。权限不对,服务器可能忽略该文件,导致URL重写失败,进而404。

如果是Nginx服务器,则没有 .htaccess,需要在Nginx配置文件中添加 try_files 指令:

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

确保这个指令存在且路径正确。很多新手从Apache换到Nginx,或者用宝塔一键部署,忘了检查这块,导致固定链接全部失效。

如何解决图片、CSS、JS资源404问题?

有时候,页面主体能打开,但图片裂了,样式乱了,脚本报错了。这是因为数据库中存储的媒体文件URL还是旧域名。例如,数据库里存的是 http://old-domain.com/wp-content/uploads/2023/10/image.jpg,但你现在访问的是 new-domain.com,浏览器去 old-domain.com 找图片,当然找不到。

解决方案:

  1. 确保数据库替换彻底:前面的 Better Search Replace 插件替换时,一定要勾选 wp_posts 表,因为图片URL通常存在 post_content 字段里。
  2. 检查硬编码URL:有些主题或插件会在代码里硬编码域名。比如页脚写死了 http://old-domain.com/contact。这种情况需要手动修改主题文件(footer.php)或插件文件。
  3. 使用相对路径:长期来看,建议在代码中尽量使用相对路径(如 /wp-content/...)而不是绝对路径。这样换域名时,只需改根域名,不用改具体路径。

快速验证方法: 打开浏览器开发者工具(F12),切换到“Network”(网络)标签,刷新页面。查看是否有红色的请求(404错误)。点击红色的图片请求,看它的URL是不是旧域名。如果是,说明数据库替换没彻底,或者前端有JS动态加载了旧域名的资源。

换域名后SEO会受影响吗?如何补救?

这是大家最关心的。换域名等于告诉搜索引擎“我搬家了”。如果处理不好,旧域名的权重会丢失,新域名需要重新爬取和收录,SEO会断崖式下跌。

关键动作:301重定向 必须在服务器层面(Apache/Nginx)或 .htaccess 中设置301重定向,将旧域名的所有请求永久跳转到新域名。

Apache .htaccess 示例:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain\.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.old-domain\.com [NC]
RewriteRule ^(.*)$ https://www.new-domain.com/$1 [L,R=301]

Nginx 示例:

server {listen 80;server_name old-domain.com www.old-domain.com;return 301 https://www.new-domain.com$request_uri;
}

重要提示:

  • 301重定向必须是永久的,不能是302临时跳转。
  • 重定向规则要覆盖所有旧域名变体(带www和不带www,http和https)。
  • 设置完成后,访问 http://old-domain.com/about,浏览器应自动跳转到 https://www.new-domain.com/about,且地址栏显示的是新域名。

Google Search Console 操作:

  1. 登录 Google Search Console。
  2. 添加新域名作为新资源。
  3. 使用“网址更改”工具,提交旧域名到新域名的映射关系。虽然这个工具主要用于整站迁移,但提交后有助于Google更快地理解你的迁移意图,加速新域名的收录。
  4. 监控旧域名的抓取错误,确保所有旧页面都能正确301到新页面。

常见问题自查清单

如果做完以上步骤,还是404,请对照这张清单自查:

检查项 正常状态 异常处理
域名解析 ping new-domain.com 返回正确IP 修改DNS记录,等待24-48小时生效
SSL证书 浏览器显示锁头图标,无警告 重新申请并绑定新域名的SSL证书
数据库域名 wp_options 中 siteurl 和 home 为新域名 使用插件或SQL修改,确保无遗漏
.htaccess/Nginx RewriteBase 或 try_files 配置正确 检查文件权限,确认重写模块已启用
301重定向 旧域名访问自动跳转新域名 在服务器配置中添加301规则
固定链接 前台文章URL可正常访问 后台重新保存一次“固定链接”设置

特别提示:有些主机商(如AWS、DigitalOcean)使用Cloudflare或CDN,换域名后记得在CDN控制台添加新域名,并配置SSL证书。否则,CDN缓存的旧域名资源可能导致间歇性404或混合内容错误。

换域名不是小事,它涉及到服务器、数据库、前端、SEO多个层面。但只要你按步骤来,先备份,再改库,后配服务器,最后设重定向,成功率非常高。记住,备份是救命稻草,301是SEO保险。别嫌麻烦,多花十分钟检查,能省你几天的心力。

你的网站用的什么技术栈?WordPress、Typecho还是其他?评论区聊聊,说不定能帮你避开下一个坑。