diff --git a/scripts/ci/combine-site.sh b/scripts/ci/combine-site.sh index 594fd06..ad41a1b 100755 --- a/scripts/ci/combine-site.sh +++ b/scripts/ci/combine-site.sh @@ -22,15 +22,22 @@ rm -rf "${DIST}/user" mkdir -p "${DIST}/user" cp -R "${UC}/." "${DIST}/user/" -# 2) 合并 _headers:用户中心路径规则前缀 /user,追加到官网 _headers 之后。 +# 2) 合并 _headers:用户中心路径规则前缀 /user,置于官网规则【之前】。 +# ⚠️ CF Pages _headers 对同一 header 取【首个匹配规则】的值(实测:若 /user/* 排 +# 在官网 /* 之后,/user/ 页会命中在前的 /* 官网严格 CSP → 内联样式/连 API 被拦、 +# 页面裸奔)。故 /user/* 必须在 /* 之前才能让用户中心 CSP 生效。 # 删掉并入产物里那份会被 CF 忽略的 /user/_headers,避免误导。 rm -f "${DIST}/user/_headers" +# 行首 '/'(路径规则)前缀 /user;'#' 注释与缩进的 header 行不动。 +sed -E 's#^/#/user/#' "${UC}/_headers" > "${DIST}/_uc_headers.tmp" { + echo "# ==== 用户中心(/user/*)独立 CSP,须置于官网 /* 之前(CF Pages 首个匹配 header 生效)====" + cat "${DIST}/_uc_headers.tmp" echo "" - echo "# ==== 用户中心(/user/*)独立 CSP,combine-site.sh 从 usercenter/_headers 重定 ====" - # 行首 '/'(路径规则)前缀 /user;'#' 注释与缩进的 header 行不动。 - sed -E 's#^/#/user/#' "${UC}/_headers" -} >> "${DIST}/_headers" + cat "${DIST}/_headers" +} > "${DIST}/_headers.new" +mv "${DIST}/_headers.new" "${DIST}/_headers" +rm -f "${DIST}/_uc_headers.tmp" echo "==> combine-site: done — 用户中心并入 ${DIST}/user/,_headers 已按 /user/* 分域合并" ls -la "${DIST}/user" | head