网站搬家这件事,场景比想象中多:换服务器、做测试环境、备份整站内容、把静态资源同步到CDN节点、公司收购了一个网站要把内容迁到自己域名下。每一种场景对工具的要求不一样,用错工具的结果不是内容丢了,就是链接全乱套。
下面把市面上主流的几种网站内容镜像/迁移方案拆开讲,每种方案适合什么场景、踩过什么坑,一次说清楚。
网站镜像的三种合法场景
| 场景一 | 网站迁移/搬家:换服务器、换域名,需要把整站内容完整搬到新环境,URL结构、内部链接、图片路径都不能乱。 |
| 场景二 | 离线备份/归档:把线上站点完整下载到本地,防止服务器故障或网站关闭后内容丢失。 |
| 场景三 | 多节点内容同步:一套内容部署到多个服务器节点,每个节点内容完全一致(如CDN源站同步、多地域部署)。 |
⚠️ 注意:未经授权镜像他人网站内容属于侵权行为。本文讨论的工具仅适用于你自己拥有合法权限的网站。
方案一:wget——命令行里的瑞士军刀,免费但参数多到劝退
wget是Linux系统自带的下载工具,也是做整站镜像最经典的方式。一条命令就能递归下载整个网站:

wget -r -np -k -p -e robots=off https://www.example.com/
这条命令的参数含义:
| 参数 | 作用 |
|---|---|
-r | 递归下载,顺着链接往下爬 |
-np | 不爬父级目录,只下载当前目录及子目录 |
-k | 转换链接为本地相对路径,离线也能点开 |
-p | 下载页面所需的所有资源(CSS、JS、图片) |
-e robots=off | 忽略robots.txt限制(只对自己有权限的站用) |
wget在实际使用中的常见问题:
问题一:爬着爬着跑到站外去了。 如果不加 --domains=example.com 限制域名,wget会顺着外链爬到别人的网站。解决:
wget -r -np -k -p -e robots=off --domains=example.com --limit-rate=200k https://www.example.com/
问题二:动态页面抓不下来。 wget只能抓取HTML源码,如果你的页面内容是通过JavaScript动态加载的(React/Vue前端渲染),wget拿到的是空壳。这种情况wget无解,需要上HTTrack或Puppeteer。
问题三:抓取速度太快被服务器封IP。 加上 --wait=1(每次请求间隔1秒)和 --limit-rate=200k(限速200KB/s),模拟正常浏览行为。
wget 适合谁:有Linux操作经验、站点以静态页面为主(或服务端渲染)、不需要图形界面。
不适合谁:纯前端渲染的SPA网站、需要登录才能访问的页面、不想记命令行的纯运营人员。
方案二:HTTrack——有图形界面,参数调好了比wget更完整
HTTrack是Windows/Linux/macOS全平台支持的开源整站下载工具,最大的优势是有图形界面。对于不习惯命令行的人,HTTrack的学习成本几乎是零。

但HTTrack真正的价值不在界面上,而在它能处理wget搞不定的场景:
支持身份认证。 如果你的网站有后台登录或需要cookie才能访问,HTTrack可以配置cookie信息,模拟已登录状态抓取。
链接结构保持。 HTTrack下载后会重建完整的目录结构,本地打开时所有内部链接都是可点击的。wget的 -k 参数也能做到,但HTTrack在处理复杂路径时更稳定。
断点续传。 抓取5000个页面的过程中网络断了,HTTrack可以从断点继续,不需要重新开始。wget也可以用 -c 参数实现,但不如HTTrack的工程化处理完善。
| 对比维度 | wget | HTTrack |
|---|---|---|
| 操作方式 | 纯命令行 | 图形界面 + 命令行 |
| 动态页面(JS渲染) | 不支持 | 基础支持,复杂SPA仍有限 |
| 抓取速度 | 快(轻量级) | 中等(处理更完整) |
| 链接完整性 | 依赖 -k 参数,偶有遗漏 | 默认处理,更稳定 |
| 身份认证(Cookie) | 需手动配置header | 界面直接配置 |
| 断点续传 | 支持(-c参数) | 原生支持,更稳定 |
HTTrack的一个隐藏技巧:可以设置"只下载特定文件类型"。比如你只想要所有HTML页面和图片,不下载CSS和JS:
# HTTrack命令行模式httrack "https://www.example.com/" -O "./mirror" \-%v \+*.html +*.htm +*.jpg +*.png +*.gif \-*.*
方案三:rsync——服务器间同步的最快选择,但前提是你有SSH权限
前面两个方案是通过HTTP协议抓取,适合你没有服务器权限、只能通过浏览器访问的场景。但如果你有服务器的SSH权限,rsync才是最正确的方案——它直接同步文件,不经过HTTP层,速度最快、内容最完整。
# 从旧服务器同步整站到新服务器rsync -avz --progress root@旧服务器IP:/www/wwwroot/example.com/ /www/wwwroot/new-example.com/# 参数说明:# -a 归档模式,保留权限、时间戳、软链接# -v 显示详细过程# -z 传输时压缩,节省带宽# --progress 显示进度条
rsync的核心优势是增量同步——第一次全量复制后,后续只传输有变化的文件。比如你的网站有10GB图片,改了3篇文章,rsync只传这3篇文章相关的文件,10GB图片不动。这个特性让它在日常运维中比wget/HTTrack实用得多。

rsync vs wget/HTTrack 的核心区别
wget和HTTrack是通过浏览器协议"爬取"内容——你只能拿到网站对外暴露的内容(HTML、图片、CSS等),拿不到PHP源码、数据库、服务器配置。
rsync是文件系统级别的同步——你能拿到服务器上的所有文件,包括后端代码和配置文件。这是本质区别,决定了它们适用于完全不同的场景。
方案四:WordPress/常用CMS的专用迁移方案
如果你的网站是WordPress,有比通用工具更省事的选择:
| 工具 | 适用场景 | 操作难度 |
|---|---|---|
| All-in-One WP Migration | 完整搬家:文章+插件+主题+媒体库一键打包导出 | ⭐ 极低,拖拽导入 |
| Duplicator | 大站点迁移,支持打包时排除缓存和日志文件 | ⭐⭐ 中等 |
| 宝塔一键迁移 | 两台宝塔面板之间迁移,自动处理数据库+文件+配置 | ⭐ 极低,一键操作 |
| UpdraftPlus | 定期自动备份+一键恢复,支持远程存储(云盘、FTP等) | ⭐ 低 |
WordPress迁移有一个特别容易踩的坑:导出导入后,文章里的图片路径还是旧域名的。在导入新站后,需要批量替换数据库中的URL。推荐用Better Search Replace插件,在数据库层面做全局替换,比手动改快得多。
镜像/迁移完成后必须检查的5个事项
不管用哪种工具搬完网站,下面5个检查项漏一个都可能出问题:
✅ 检查清单:
1. 内部链接是否正确:随机点10个页面,看导航栏、文章内链、分页链接是否指向新域名而不是旧域名
2. 图片和资源文件是否完整:打开5篇文章,确认没有裂图,CSS样式是否正常加载
3. 数据库连接是否正常:如果是动态网站,确认新站的数据库配置指向了正确的数据库
4. 301重定向是否配置:如果换了域名,旧域名的所有URL必须301跳转到新域名对应URL
5. SSL证书是否生效:新站HTTPS是否能正常访问,证书是否正确配置
哪种方案适合你的情况
一张表对号入座
| 有SSH权限 | rsync 增量同步,最快最完整。迁移后记得同步数据库。 |
| 没有SSH,是WordPress | All-in-One WP Migration 插件,导出导入三步搞定。 |
| 没有SSH,是静态网站 | HTTrack 图形界面操作,完整度比wget高。 |
| 没有SSH,纯命令行环境 | wget 一条命令搞定,加好域名限制和速率限制参数。 |
| 两台宝塔面板之间 | 宝塔一键迁移,文件+数据库+SSL+伪静态规则全部自动迁移。 |
网站镜像/迁移这件事,选工具的思路应该是:先看你有没有服务器权限,再看你用什么CMS,最后才考虑通用工具。有权限用rsync,有CMS用专用插件,实在不行才上wget/HTTrack从外面爬。顺序对了,省掉的不只是时间,还有排查"为什么图片全裂了"的焦头烂额。
