#!/usr/bin/env bash # combine-site.sh — 把用户中心(web/usercenter/out/)并入官网产物,供**单次** CF Pages # 部署到 pangolin-site:官网在 /、用户中心在 /user/(域名迁移:原独立子域 # app.yanmeiai.com → pangolin.yanmeiai.com/user/)。 # # 关键:两个 app 的 CSP 不同(官网用脚本哈希 + connect-src 'self';用户中心要 # 'unsafe-inline' + connect-src https 调 api)。CF Pages 只读产物根 _headers,故把 # 用户中心的 _headers 规则前缀重定到 /user/*,追加在官网规则之后 —— CF Pages 对同 # 一路径「后写规则覆盖先写」,于是 /user/* 命中用户中心 CSP,其余走官网 CSP。 # # 由 compile-site.sh + compile-usercenter.sh 先产出 dist/ 与 out/;从 repo 根调用。 set -euo pipefail DIST=web/website/dist UC=web/usercenter/out [ -d "$DIST" ] || { echo "==> combine-site: $DIST 不存在(先跑 compile-site.sh)" >&2; exit 1; } [ -d "$UC" ] || { echo "==> combine-site: $UC 不存在(先跑 compile-usercenter.sh)" >&2; exit 1; } # 1) 用户中心产物挂到 /user/。 rm -rf "${DIST}/user" mkdir -p "${DIST}/user" cp -R "${UC}/." "${DIST}/user/" # 2) 合并 _headers:用户中心路径规则前缀 /user,追加到官网 _headers 之后。 # 删掉并入产物里那份会被 CF 忽略的 /user/_headers,避免误导。 rm -f "${DIST}/user/_headers" { echo "" echo "# ==== 用户中心(/user/*)独立 CSP,combine-site.sh 从 usercenter/_headers 重定 ====" # 行首 '/'(路径规则)前缀 /user;'#' 注释与缩进的 header 行不动。 sed -E 's#^/#/user/#' "${UC}/_headers" } >> "${DIST}/_headers" echo "==> combine-site: done — 用户中心并入 ${DIST}/user/,_headers 已按 /user/* 分域合并" ls -la "${DIST}/user" | head