从9.9元美国鸡到白嫖虚拟主机:一个站长的迁移血泪史与伪静态科普

skl 发布于 2026-02-28 34 次阅读


从9.9元美国鸡到白嫖虚拟主机:一个站长的迁移血泪史与伪静态科普

折腾了两天,踩了无数坑,最后发现问题的根源竟然只是一个文件——.htaccess。这篇文章记录了我把WordPress从美国服务器迁移到免费虚拟主机的全过程,顺便科普一下伪静态、Apache以及它们之间的爱恨情仇。


? 迁移背景:美国服务器撑不住了

先交代一下背景。

我有一台美国云服务器,9.9元/月,1核1G内存,3Mbps带宽。上面跑着一个WordPress博客,常年内存占用80%+,用户一多直接飙到95%,稍微有点并发就卡成PPT。更坑的是,这台机器3月8号就要到期了,而且同款的日本服务器(9.9元)早就卖断货,根本抢不到。

本来想换日本服务器,结果发现日本机房封25端口——邮箱梦碎。于是我把目光投向了免费虚拟主机。


? 白嫖的虚拟主机:配置还行

运气不错,找到一台免费虚拟主机,能用一年,到期前2个月可以续期。配置如下:

· 带宽:5Mbps
· 月流量:30GB
· 数据库:200MB
· 子目录:1个
· 绑定域名:2个
· PHP版本:5.6(有点老,但够用)
· Web服务器:kangle(冷门,但兼容Apache规则)

看起来跑一个WordPress个人博客完全够用。


? 迁移过程:看似顺利,实则暗藏杀机

第一步:备份与恢复

从美国服务器备份:

· 数据库:用phpMyAdmin导出SQL文件
· WordPress文件:压缩 /var/www/html 整个目录

上传到虚拟主机:

· 解压WordPress文件到网站根目录
· 创建新数据库,导入SQL文件
· 修改 wp-config.php 里的数据库连接信息(数据库名、用户名、密码)

访问网站,首页正常显示!我以为这就搞定了,美滋滋地去睡觉。


? 翻车现场:后台发布文章直接崩了

第二天起来,想发篇新文章,结果点击“发布”按钮后,页面一直转圈,最后弹出一个错误:

发布失败。此响应不是合法的json响应。

我人傻了。网站能正常访问,后台能进,能写文章,就是发不出去。这是什么鬼?

打开浏览器开发者工具(F12),看到满屏的红色报错:

POST https://skly.cc/wp-json/wp/v2/posts/210 404 (Not Found)
GET https://skly.cc/wp-json/wp/v2/taxonomies/post_tag 404 (Not Found)
GET https://skly.cc/wp-json/wp/v2/taxonomies/category 404 (Not Found)
...

所有的 /wp-json/ 请求全部返回404。


? 排查过程:两天的心路历程

第一阶段:怀疑权限问题

WordPress需要写 wp-content/uploads/ 目录。我检查了文件夹权限,755,没问题。手动创建了2025/02文件夹,还是不行。

第二阶段:怀疑PHP配置

检查了PHP上传限制,upload_max_filesize 是64M,够用。post_max_size 也正常。

第三阶段:怀疑插件冲突

把所有插件都禁用了,切换到默认主题,问题依旧。

第四阶段:发现真相

这时候我发现一个关键细节:网站根目录下没有 .htaccess 文件。

为什么这个文件这么重要?这就涉及到今天的科普主题——伪静态。


? 科普时间:什么是伪静态?和Apache有什么关系?

什么是伪静态?

伪静态,全称是“伪静态网页技术”,指的是把动态网页(比如 article.php?id=123)伪装成静态网页(比如 article/123.html)的样子。

为什么要这么做?

  1. SEO友好:搜索引擎更喜欢静态链接
  2. 用户体验:链接更简洁美观
  3. WordPress依赖:WordPress从3.0开始全面采用REST API架构,后台的很多操作(包括发布文章)都需要通过 /wp-json/ 这个API接口完成。而这些API接口的访问,依赖伪静态规则!

Apache是什么?

Apache 是世界上使用最广泛的Web服务器软件之一,市场份额常年排在Nginx之后,但依然是老牌霸主。你可以把它理解为网站的“前台接待员”:

· 当用户访问你的网站时,请求先到Apache
· Apache根据规则决定:是直接返回一个静态文件,还是交给PHP处理

Apache怎么处理伪静态?

Apache实现伪静态主要靠两个东西:

  1. mod_rewrite模块:Apache的“重写引擎”,负责把动态URL转换成静态形式。比如把 index.php?p=123 变成 article/123.html。
  2. .htaccess文件:Apache的“配置文件”,放在网站根目录,告诉Apache:“嘿,访问这个网站的时候,要按我写的规则来!”

.htaccess 和 WordPress 的关系:

· WordPress安装后,默认不会生成 .htaccess
· 当你在后台 设置 → 固定链接 选择任意一种漂亮链接格式时,WordPress会尝试自动写入 .htaccess 文件
· 这个文件里写的就是让Apache正确解析WordPress链接的规则

没有 .htaccess 会怎样?

· 前台链接可能打不开(取决于服务器配置)
· 后台的REST API全部404——这就是我遇到的问题!


? 为什么1panel部署的WordPress有.htaccess,手动安装的没有?

1panel这种面板工具,在一键部署完成后,会自动帮你做两件事:

  1. 设置好文件权限
  2. 模拟登录后台,去“固定链接”页面保存一次设置

这就触发了WordPress自动生成 .htaccess 的动作。所以用面板部署的人,从来没意识到还有这个文件存在。

而手动安装WordPress,需要你自己去后台保存一次固定链接,或者手动创建 .htaccess 文件。


? 最终解决:虚拟主机的“一键伪静态”

在我折腾了两天,查了无数资料,准备手动创建 .htaccess 文件的时候,突然发现虚拟主机控制面板里有一个选项:

“伪静态设置” → 选择程序:WordPress → 开启”

我点了一下,保存,再去WordPress后台保存固定链接,然后试了试发布文章——

成功了!所有的404消失了,文章顺利发布!

那一刻我差点哭出来。


? 手动创建.htaccess的方法(以防万一)

如果你也遇到类似问题,虚拟主机没有一键设置功能,可以手动创建 .htaccess 文件:

  1. 在电脑上新建一个文本文件
  2. 复制以下代码:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
  1. 保存文件名为 .htaccess(注意前面有个点)
  2. 用FTP上传到网站根目录(和wp-config.php一起)
  3. 去WordPress后台 设置 → 固定链接,再保存一次

? 迁移启示录:几点血的教训

  1. 永远保留备份

我把美国服务器上的源码删了,导致搬家时缺少参考文件。这是一个低级错误。任何迁移操作前,务必完整备份:

· 数据库
· 所有文件(包括隐藏文件!)
· 当前使用的主题和插件列表

  1. 了解你的服务器环境

不同的Web服务器(Apache、Nginx、Kangle、IIS)处理伪静态的方式不同。我这次用的Kangle虽然兼容Apache规则,但如果不开启支持,.htaccess也不生效。上船前先摸清船的结构。

  1. 浏览器开发者工具是你的好朋友

遇到前端问题,别瞎猜。按F12,看Network标签,看Console报错,让数据说话。这次的404错误就是靠开发者工具找到的。

  1. 官方文档永远是最靠谱的

我发的那段报错里的链接,指向WordPress官方文档,解释了API版本兼容性问题。虽然那不是导致我网站崩掉的原因,但养成看官方文档的习惯,能让你少走很多弯路。

  1. 免费的东西往往最贵

这次白嫖的虚拟主机虽然最终搞定了,但花了两天时间。时间成本远远超过那9.9元。如果你的网站有价值,该花的钱还是要花。


? 最终配置:三权分立架构

折腾完这一波,我现在的架构是:

· 免费虚拟主机:跑WordPress(白嫖一年)
· 美国服务器:跑邮箱系统(9.9元/月)
· Cloudflare CDN:套在前面防DDoS(免费)
· Orange Pi Zero3:内网穿透,做备份和监控(已有)

一个月总成本:9.9元,比一杯奶茶还便宜。


? 最后的话

写这篇博客,一是记录自己踩过的坑,二是希望帮助遇到同样问题的人。如果你正在把WordPress从一个环境迁移到另一个环境,一定记得检查 .htaccess 文件。它可能就是你解决问题的关键。

如果这篇文章对你有帮助,欢迎留言交流。如果有什么不对的地方,也欢迎指正。

迁移不易,且行且珍惜。祝大家的网站都稳定运行,永不报错! ?


—— 写于2025年某个月黑风高的夜晚,一个刚刚解决完bug的技术宅