不能直接复制public到htdocs,因Hexo默认根路径路由在XAMPP下会导致内部链接404、资源加载失败及刷新子页面报错;须修改_config.yml中url为http://localhost、root为/(或子目录对应路径),再重新生成并部署,或配置XAMPP虚拟主机。

Hexo 生成的是纯静态文件,XAMPP 完全能跑,但直接把 public 文件夹丢进 htdocs 就完事——这种做法在 Windows 下看似可行,实际会踩到路径、重定向、资源加载失败三个坑。
为什么不能直接复制 public 到 htdocs
Hexo 默认生成的链接是相对根路径(/css/style.css、/archives/),而 XAMPP 的 htdocs 是 Web 根目录。一旦你把整个 public 放进去,访问 http://localhost/ 确实能打开首页,但点「归档」「标签」或任何内部链接,大概率 404。原因:Hexo 的路由假设它部署在域名根路径下,但你没改配置,也没配虚拟主机,它就认死理走 /xxx,而 XAMPP 没做 URL 重写支持。
- 不改
_config.yml中的url和root,所有内部链接仍按https://example.com/xxx构建,本地却只有http://localhost/xxx,域名不匹配 → 资源 404 -
hexo s启动的本地服务器自带 LiveReload 和路由 fallback,XAMPP 没这功能 → 刷新子页面(如/posts/hello/)直接报 404 - 如果你把
public放进子目录(比如htdocs/blog/),又不调root,所有路径全错位
必须改的两个配置项:url 和 root
打开博客根目录下的 _config.yml,找到这两行并修改:
-
url:改为http://localhost(不是http://localhost/,末尾斜杠会引发双斜杠问题) -
root:改为/(如果准备放在htdocs根下);若想放子目录如htdocs/myblog/,则设为/myblog/(前后都带斜杠)
改完后重新执行 hexo clean && hexo g,再把新生成的 public 内容复制过去。否则旧缓存文件仍含错误路径。
用 XAMPP 虚拟主机替代 htdocs 复制
比手动复制更可控的方式是配虚拟主机,让 XAMPP 把某个目录当作独立站点对待。编辑 C:\xampp\apache\conf\extra\httpd-vhosts.conf,追加:
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、Thin
<VirtualHost *:80>
DocumentRoot "C:/your/hexo/blog/public"
ServerName hexo.local
<Directory "C:/your/hexo/blog/public">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
然后修改系统 hosts 文件(C:\Windows\System32\drivers\etc\hosts),加一行:
127.0.0.1 hexo.local
重启 Apache。之后访问 http://hexo.local,效果等同于线上部署,且支持刷新任意子路径(前提是主题没硬编码绝对域名)。
预览时别依赖 hexo s,但别跳过它
hexo s 是开发阶段唯一能真实模拟 Hexo 路由逻辑的工具。XAMPP 只是 HTTP 服务,不处理 Hexo 的渲染上下文。所以正确流程是:
- 写文章、改主题后,先跑
hexo s看是否能正常跳转、CSS 是否加载、分页是否生效 - 确认无误再
hexo g生成静态文件 - 再扔进 XAMPP(或配好虚拟主机)做最终验证
- 尤其注意:如果用了
hexo-generator-search或hexo-browsersync这类插件,它们只在hexo s下工作,XAMPP 里不会有任何效果
真正容易被忽略的,是 root 配置和子目录部署的耦合关系——哪怕只多一个斜杠,整个站点的 CSS 和 JS 都可能加载失败,而浏览器控制台只报 404,看不出根源在 Hexo 配置里。

















