在使用 All-in-One WP Migration 插件迁移 WordPress 后遇到除主页外其他页面均报 404 错误,这是迁移后伪静态规则失效或配置未更新的典型问题。以下是系统化的排查与解决步骤,按优先级排序操作:
🔧 一、优先操作:重置固定链接(90% 问题在此解决)
进入 WordPress 后台 → 设置 → 固定链接。
先将结构改为 “朴素”(即动态链接),点击 “保存更改”。
再切换回你原来的自定义结构(如
/\%postname\%/
),再次 保存更改。
→ 此操作会重写.htaccess
文件并刷新重定向规则124。
📂 二、检查服务器配置(针对 Apache 或 Nginx)
Apache 服务器:
启用
mod_rewrite
模块
在终端运行:bash
sudo a2enmod rewrite && sudo systemctl restart apache2
检查目录权限
打开 Apache 配置文件(如/etc/apache2/sites-available/000-default.conf
),确保对应站点的<Directory>
区块包含:apache
<Directory "/var/www/html/your-site"> AllowOverride All # 必须为 All </Directory>
保存后重启 Apache:
sudo systemctl restart apache2
168。
Nginx 服务器:
修改站点配置文件(如
/etc/nginx/sites-available/your-site
)
在server {}
区块内添加以下规则:nginx(我的是用这个方法解决成功,本篇文章的记录初始原因)
location / { try_files $uri $uri/ /index.php?$args; }
测试配置并重启:
bash
sudo nginx -t && sudo systemctl reload nginx
17。
⚙️ 三、验证 .htaccess
文件状态
检查文件是否存在:
WordPress 根目录(通常为/var/www/html/
)需存在.htaccess
文件(隐藏文件)。确认内容正确:
正常内容应为:apache
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
→ 若被篡改或缺失,从其他正常站点复制或手动创建19。
检查文件权限:
运行命令:bash
chmod 644 .htaccess # 文件权限 chmod 755 /path/to/wordpress # 目录权限
🧩 四、排查插件/主题冲突
临时禁用所有插件:
通过 FTP 将/wp-content/plugins/
文件夹重命名为plugins_backup
。切换默认主题:
重命名当前主题文件夹(如/wp-content/themes/your-theme
改为your-theme_backup
),触发 WordPress 回退至默认主题。重新访问页面 → 若 404 消失,则逐个恢复插件/主题定位冲突源810。
🛠️ 五、数据库修复(少部分情况需要)
手动更新
permalink_structure
:
进入数据库(如 phpMyAdmin),打开表wp_options
(前缀可能不同),找到permalink_structure
项,确保其值与迁移前一致(如/%postname%/
)8。校对站点地址:
检查wp_options
表中的siteurl
和home
字段,需为新域名。
有一些是插件原因,可以下载历史版本替换试试:https://downloads.wordpress.org/plugin/elementor.3.30.1.zip
💡 提示:若使用宝塔面板等管理工具,需在“网站设置”中手动开启“伪静态”并选择 WordPress 规则,避免手动编辑配置文件7。
按以上步骤操作后,绝大多数迁移导致的 404 问题均可解决。如仍异常,可结合服务器错误日志(/var/log/apache2/error.log
或 Nginx 的 error.log
)进一步分析。