“兄弟们!今天我可太开心了!刚刚把心爱的博客从一台服务器搬到另一台,结果一点就蹦出一个大红 403,好多人一看就慌,我直接笑出声——这不是提示我‘兄弟,你离成功只差一步’嘛!”
先别急着砸键盘,403 只是服务器在说:“我知道你来了,但暂时不让你进。”就像你搬家后拿着旧钥匙开新门,锁芯换了你得换钥匙,对吧?我总结了三步,保准比喝冰可乐还爽。
第一步:确认新家大门的“钥匙”
把网站文件打包带走时,别只拷 wp-content,一定连 .htaccess 一起带走。这小家伙在 Apache 里就是“门禁卡”。我那次忘了它,结果服务器找不到规则,直接甩 403。把旧文件里的 .htaccess 拿出来,用 FTP 丢到新根目录,权限 644,完美!
第二步:给数据库“改签”
数据库里的 wp_options 表,siteurl 和 home 两行还是旧地址,不改就永远进门找不到北。进 phpMyAdmin,双击改字段,把
http://old.com 换成
http://new.com,一敲回车,世界瞬间清爽。别忘了再跑一遍 SQL 把所有正文里的旧域名一起替换,一条语句就搞定:
UPDATE wp_posts SET post_content = REPLACE(post_content,'old.com','new.com');
第三步:让服务器“认识”你
有些主机默认禁止目录浏览,目录权限 777 会触发 403。把整站设 755,文件 644,wp-config.php 单独 600,安全又开心。Linux 一条命令:
find /var/www/newsite -type d -exec chmod 755 {} ; && find /var/www/newsite -type f -exec chmod 644 {} ;
做完这三步,浏览器一刷新,熟悉的页面扑通跳出来,403?拜拜!我当时开心得原地蹦迪,连夜发了条朋友圈:“403 不是拦路虎,是搬家成功的礼炮!”
教程:WordPress 整站迁移出现 403 的详细排查与解决
准备工作
• 备份旧站:打包整站文件 + 导出数据库。
• 记录环境:旧 PHP 版本、Web 服务器类型(Apache/Nginx)、数据库账号密码。
传输文件
1.1 打包下载
tar -czvf oldsite.tar.gz /var/www/oldsite
1.2 上传到新服务器并解压
tar -xzvf oldsite.tar.gz -C /var/www/newsite
调整目录与文件权限
• 所有目录 755
• 所有文件 644
• wp-config.php 600
Linux 批量命令:
find /var/www/newsite -type d -exec chmod 755 {} ;
find /var/www/newsite -type f -exec chmod 644 {} ;
chmod 600 /var/www/newsite/wp-config.php
导入数据库
3.1 新建数据库与用户
CREATE DATABASE newdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'StrongPass!';
GRANT ALL PRIVILEGES ON newdb.* TO 'newuser'@'localhost';
3.2 导入旧数据
mysql -u newuser -p newdb < oldsite.sql
检查并修复 .htaccess
5.1 确认文件存在:
ls -la /var/www/newsite/.htaccess
5.2 若不存在,登录后台 → 设置 → 固定链接 → 直接点“保存”,WordPress 会自动生成。
5.3 若存在但仍 403,把内容简化测试:
# BEGIN WordPress
# END WordPress
Nginx 用户专属
若新服务器是 Nginx,没有 .htaccess,需在 server 块中写入:
location / {
try_files uriuri/ /index.php?$args;
}
保存后执行:sudo nginx -t && sudo systemctl reload nginx
清理缓存与测试
• 如果是宝塔、cPanel 等面板,清一次“静态缓存”和“OPcache”。
• 浏览器开无痕窗口访问
http://new.com,确认 403 消失。
故障速查表
• 403 只在后台:检查 wp-admin 目录权限 755。
• 403 只在上传目录:确认 wp-content/uploads 755,且上级目录可执行。
• 403 只在 REST API:安全插件(Wordfence、iThemes Security)可能限制,临时关闭验证。
终极大招
若以上都无效,打开 wp-config.php,在文件末尾加:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
访问触发 403 的页面,然后查看 /wp-content/debug.log,根据错误信息精准修复。
照着这份清单一步步来,403 只会出现一次,剩下的就是开心享受新家的速度和安全!