🚨 2026-11-10 托管变更:
*.autional.cn已迁出 Vercel —— 改为 mf01 构建(node:24-alpine + 钉版 pnpm)→ 香港自建托管。.cn的构建 env 由 workspaceshared/infra-ops/sites/sites.manifest.json注入;push 后由 mf01 cron(约 10 分钟)构建发布,不经 Vercel。*.autional.com仍在 Vercel —— 本文中涉及 Vercel 的构建/部署描述对.com仍然成立。 现行口径:workspacedocs/AUTIONAL-CN-SITES-SELF-HOST.md。
域名:trust.autional.cn(cn)· trust.autional.com(com) 技术栈:Vite + React 19 + TypeScript + Tailwind CSS 仓库:github.com/autional/trust
安全实践、数据保护与合规建设进展说明。
pnpm install
pnpm dev # http://localhost:13109(构建前自动生成 env.js/robots/sitemap/security.txt)
pnpm build # 构建产物:apps/trust-center/dist/
pnpm test # Vitest 单元测试main → trust(com)自动部署(Vercel);main → cn-trust(cn)由 mf01 cron 构建发布(约 10 分钟,不经 Vercel)。两区同一份源,
区域差异全部由构建期环境变量注入(.com 来自 Vercel 项目 env;.cn 来自 shared/infra-ops/sites/sites.manifest.json)(见 docs/positioning/24):
| 变量 | com | cn |
|---|---|---|
REGION |
com |
cn |
SITE_URL |
https://trust.autional.com |
https://trust.autional.cn |
DEFAULT_LANG / FALLBACK_LANG |
en |
zh |
API_ORIGIN |
https://api.autional.com |
https://api.autional.cn |
CDN_HOST |
https://cdn.autional.com |
https://cdn.autional.cn |
- 路由/重写:
vercel.ts(fail-closed:API_ORIGIN缺失即构建失败)。 - 生成物(勿手改、勿入库):
apps/trust-center/public/{env.js,robots.txt,sitemap.xml,.well-known/security.txt}←scripts/gen-env.mjs;区域文案在scripts/region-copy.mjs。 - 本地无 env 时兜底 cn 值(与迁移前基线一致)。
- 路由单点:
scripts/routes.mjs(12 条公开路由)同时驱动 sitemap 与静态 HTML 生成。 - 按路由出静态 HTML:
dist/<route>/index.html(每页正确canonical/og:url/ 三行 hreflang / 区域标题)+dist/spa.html(未知路径兜底壳,不含 canonical/og:url)。 - SPA 兜底:
Accept: text/html或*/*才兜底(社交/IM/AI 抓取器不再 404),正则排除/assets/与带扩展名路径(缺失资产仍 404);vercel.ts有 fail-closed 守卫。 - hreflang:
zh-CN↔.cn、en-US↔.com、x-default→.com;useTrustSEO在客户端导航时同步。 - 本站无 RSS;
/security-alerts/confirm、/security-alerts/unsubscribe带令牌,不入 sitemap、不参与 hreflang 配对。 - 详见
docs/SEO-FEED-REGION-ISOLATION-2026-10-30.md。
⚠ 改
vercel.ts的必读:rewrites[].source由@vercel/config按 path-to-regexp 解析, 负向前瞻会被直接拒绝(Invalid path-to-regexp pattern),表现为「部署失败、域名停留上一版」, 本地构建看不出来。兜底规则因此写成/:path((?:[^./]+/)*[^./]*)。 改完先本地求值:API_ORIGIN=https://api.autional.cn node --experimental-strip-types vercel.ts。