Files
StudyDiary-20261009/60-Imports/64-AI/WordPress迁移后首页正常、内页404 Not Found(WPvivid迁移完成)完整排查方案.md

176 lines
6.1 KiB
Markdown
Raw Normal View History

2026-10-09 22:06:40 +08:00
# WordPress迁移后首页正常、内页404 Not Found(WPvivid迁移完成)完整排查方案
# WordPress 迁移后首页正常、内页 404 Not Found(WPvivid 迁移完成)完整排查方案
## 核心现象总结
首页能打开、数据库 / 文件迁移成功;**文章、页面链接访问 404**,95% 场景是【伪静态(固定链接)\+ 服务器环境不匹配】,其次是 Nginx/Apache 规则缺失、\.htaccess 没迁移、权限问题。
## 一、优先最高概率方案(先试这个,大部分人直接解决)
### 方案 1:重新刷新 WordPress 固定链接(最常见!)
> WPvivid 迁移数据库后,固定链接配置存入数据库,但新服务器不会自动重写 rewrite 规则缓存。
>
>
1. 登录 WP 后台:**设置 → 固定链接**
2. **不需要修改任何选项**,直接拉到页面底部,点击【保存更改】
3. 保存动作会自动刷新 WordPress 重写规则、重建 rewrite 缓存
4. 清除网站缓存(WP 缓存插件、服务器缓存、浏览器 Ctrl\+F5)测试内页
> ⚠️ 重点:哪怕你固定链接格式和旧站一模一样,**必须点一次保存更改**!
>
>
---
## 二、如果上面无效,区分你的服务器 Web 服务(Apache / Nginx)
### 情况 A:服务器是 Apache(宝塔 Apache、cPanel、虚拟主机大多是 Apache)
WordPress 伪静态依靠 `.htaccess` 文件
1. 检查网站根目录是否存在 **`.htaccess`**
- WPvivid 备份默认会打包\.htaccess,但部分主机 / 压缩环境会忽略隐藏文件!
2. 查看文件内容,标准 WordPress \.htaccess 代码:
```apache
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
```
3. 两个关键检查:
1)主机是否开启 `mod_rewrite` 模块(很多新装 Apache 默认没开!)
2)网站目录权限允许`.htaccess`生效(AllowOverride All,宝塔站点配置里调整)
> 常见坑:旧主机支持\.htaccess,新主机关闭了 AllowOverride,规则不执行 → 内页 404
>
>
### 情况 B:服务器是 Nginx(宝塔 Nginx、阿里云、腾讯云服务器默认)
**Nginx 不读取\.htaccess!这是高频踩坑点!**
WPvivid 迁移过来的\.htaccess 完全无效,必须手动在站点配置添加 WP 伪静态规则。
#### 标准 WordPress Nginx 伪静态(永久链接非朴素格式使用)
```nginx
location / {
try_files $uri $uri/ /index.php?$query_string;
}
```
操作步骤(宝塔面板举例):
1. 站点设置 → 配置文件
2. 在`server {}`内部插入上面这段规则
3. 保存,**重载 Nginx 配置**
4. 再次去 WP 后台【固定链接】点保存更改
> 坑:很多人从 Apache 主机迁移到 Nginx,只迁移文件,忘记添加 Nginx 伪静态,直接 404!
>
>
## 三、WPvivid 迁移专属特殊问题排查(插件迁移特有 bug)
1. **站点地址(URL)自动替换是否完整?**
WPvivid 迁移时有【替换域名】功能,如果替换不彻底会引发路由异常
后台 → 设置 → 常规
检查:
- WordPress 地址(URL)
- 站点地址(URL)
两个地址必须是**新域名,不能残留旧域名**
👉 修复方案(如果地址错乱):
方法 1:WPvivid 工具里再次执行【数据库搜索替换】,旧域名 → 新域名
方法 2:或者安装 **Better Search Replace** 全局清理数据库旧网址
> 注意:不要只改后台设置,数据库文章、选项表残留旧域名也会干扰 rewrite
>
>
2. 子目录部署问题
旧网站如果是 `domain.com/blog`,新站放在根目录;或者反过来,目录结构变化,固定链接、RewriteBase 不匹配直接 404。
## 四、进阶排查手段(上面无效再操作)
### 1\. 测试固定链接格式定位问题
进入 设置→固定链接,临时切换为 **朴素格式(?p=123)**
- 如果朴素格式链接能正常打开:
✅ 证明:PHP、数据库、网站运行正常,**纯粹是伪静态规则缺失 / 失效**,聚焦上面 Apache/Nginx 规则修复
- 如果朴素格式依然 404:
❌ 不是伪静态问题!问题在文件路径、网站根目录、程序权限、Nginx/Apache 根目录配置错误
### 2\. 文件权限检查
网站目录文件权限推荐:
- 文件夹:755
- 文件:644
若权限过严,服务器无法访问 PHP 文件,也会出现异常 404。
### 3\. 关闭 CDN、缓存测试
新站点如果接入 CDN,缓存了错误 404 响应;先暂停 CDN,清除所有缓存(WP Rocket/W3 Total Cache、服务器 opcache)。
### 4\. 禁用插件冲突测试
极少数情况:重定向插件(Redirection、Yoast SEO)、安全插件缓存了旧路由
重命名插件文件夹 `wp-content/plugins` → `plugins.bak`,临时全部禁用,测试内页。
## 五、最简排查顺序(照着一步步执行,效率最高)
1. WP 后台【设置→固定链接】直接保存更改 ✅(第一步必做)
2. 切换固定链接为朴素链接,判断是不是伪静态问题
3. 判断服务器是 Apache 还是 Nginx:
- Apache:检查\.htaccess \+ mod\_rewrite \+ AllowOverride All
- Nginx:添加 wordpress 伪静态规则,重载服务
4. 核对【WordPress 地址、站点地址】是否全部为新域名,清理数据库旧域名
5. 清除全部缓存、CDN 缓存
6. 全部插件临时禁用排除冲突
## 补充:宝塔用户高频踩坑提醒
1. 宝塔 Nginx 站点,不要直接复制 Apache 的\.htaccess 指望生效;
2. 宝塔新建站点默认不会自带 WP 伪静态,需要手动添加或在【伪静态】选项框选择 WordPress;
3. 迁移后如果开启了【防跨站】,部分环境偶尔干扰路径访问,可以临时关闭测试。
如果你告诉我两个信息,我可以直接给你对应可用的配置代码:
① 服务器环境:Apache / Nginx(是否宝塔面板)
② 当前固定链接使用的格式(例如 /% postname%/)
> (注:部分内容可能由 AI 生成)