给客户的网站换了台服务器,踩了三个坑

王尘宇 经验分享 3

上周给一个客户的WordPress站从虚拟主机迁到阿里云ECS,踩了几个坑。记下来免得下次再犯。

坑1:MySQL字符集不一致导致乱码

旧服务器MySQL是5.6,默认latin1。新服务器8.0,默认utf8mb4。用mysqldump导出再导入后,文章里的中文全部变成问号。

试了三种方案:改my.cnf、重新dump加--default-character-set、用iconv转。最后是这么搞定的:

① 导出时明确指定:mysqldump --default-character-set=latin1 -u root -p dbname > backup.sql
② 用sed把所有latin1替换成utf8mb4
③ 导入:mysql --default-character-set=utf8mb4 dbname < backup.sql

如果数据已经乱了,可以用这个SQL把乱码字段转回来:CONVERT(BINARY CONVERT(post_content USING latin1) USING utf8mb4)。亲测有效。

坑2:Nginx配置没改导致伪静态失效

旧服务器是Apache,伪静态靠.htaccess。迁到Nginx后所有文章页都404。

WP的Nginx伪静态规则网上到处都是,但这个站点装了WooCommerce和bbPress,默认规则会漏掉/product/和/forums/的路径。加了这两条location规则才恢复正常。

验证方法:curl -I https://域名/文章路径,返回200才算通过。别只看首页正常就觉得OK了,把所有类型的URL各抽几条测一遍。

坑3:PHP版本跳太快,一个老插件挂了

旧服务器PHP 7.2,新服务器直接上了8.2。站点里有一个2019年就停更的自定义字段插件,create_function()在PHP 8.0被移除了,导致后台白屏。

解决办法:进wp-content/plugins/找到那个插件,搜create_function,改成匿名函数。就改了两行代码,省了重新找替代插件的时间。

建议升级前先跑一遍PHP Compatibility Checker插件,把不兼容的列出来再迁移。

迁移检查清单

现在每次迁移我都按这个清单走,省了不少事:

1. 先在新服务器建个测试域名,hosts指向它,确认一切正常再切DNS
2. 导出数据库前关掉WP的缓存插件(W3 Total Cache之类),避免把缓存路径写死
3. 文件和数据库传完后,更新wp-config.php里的DB_HOST、DB_NAME
4. 更新wp_options表里的siteurl和home字段(如果用测试域名的话)
5. 从头到尾爬一遍站点,用Screaming Frog或者site:搜索,确认没有残留旧域名
6. SSL证书别忘了,用acme.sh自动续期的记得重新跑一下

这些都不是什么高深技术,但每个坑都够你折腾半天。

标签: 网站迁移 wordpress 服务器 踩坑记录

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~