把静态博客放进 /blog/:路径与部署的正确打开方式
子路径部署不只是挪一个文件夹。理解构建基路径、静态文件映射和回滚,才能避免资源丢失与路由冲突。

在已有站点旁增加静态博客,是一种简单且容易维护的内容发布方式。但如果根路径已经运行 API 和控制台,博客必须拥有明确的路径边界。
构建时就声明子路径
Astro 中,site 声明公开站点来源,base 声明应用所在路径。二者不是同一件事。
import { defineConfig } from 'astro/config';
export default defineConfig({
site: 'https://example.com',
base: '/blog',
trailingSlash: 'always',
output: 'static',
});
配置框架基路径之后,手写链接仍然需要保持一致。/about/ 指向主站;博客的关于页应指向 /blog/about/。搜索索引、图标、代码拆分资源和 canonical 地址都要检查。
Nginx 必须明确映射到文件
一种便于理解的布局是让公开文件位于 /srv/example/current/blog/。Nginx 的 root 会把请求 URI 拼接到根目录后面,因此 /blog/about/ 对应这个目录下的 blog/about/index.html。
# 示例片段:放在已核实的 HTTPS server 块内。
location = /blog {
return 301 /blog/;
}
location ^~ /blog/ {
root /srv/example/current;
index index.html;
try_files $uri $uri/ =404;
error_page 404 /blog/404.html;
}
不要直接用这个示例替换现有配置。先确认原有 server、地区限制、认证规则和反向代理位置。尤其注意:server 层的 return 或条件判断可能在进入 location 前就结束请求。
发布一个版本,保留上一个版本
把每次构建上传到独立版本目录,校验完整性后再切换 current 符号链接。这样回滚不需要重新构建,只需要把链接切回旧版本。
Nginx 配置备份也应独立保留。运行 nginx -t 成功后再 reload;失败时恢复备份,不要先重启线上服务再查错误。
验收不能只看首页
- 直接打开文章链接,检查刷新后是否仍然可用。
- 检查 CSS、脚本、图标和搜索索引都来自
/blog/。 - 请求不存在的博客地址,应返回 HTTP 404,而不是主站的单页应用 HTML。
- 检查 HTTP 到 HTTPS 的跳转、文章 canonical 与 sitemap 地址。
- 复查主站登录页面、充值入口和 API 的原有行为。
静态页面能访问,不等于搜索引擎一定会收录。公开访问、有效内容和抓取允许是基础,收录时间与结果由搜索引擎决定。

