From 60cd28e085ac033dda7cdb12375558b4dd787094 Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Tue, 7 Jul 2026 21:56:29 +0800 Subject: [PATCH] =?UTF-8?q?fix(ci/site):=20=5Fheaders=20=E9=87=8C=20/user/?= =?UTF-8?q?*=20=E9=A1=BB=E6=8E=92=E5=9C=A8=20/*=20=E4=B9=8B=E5=89=8D(CF=20?= =?UTF-8?q?=E9=A6=96=E4=B8=AA=E5=8C=B9=E9=85=8D=20header=20=E7=94=9F?= =?UTF-8?q?=E6=95=88)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户中心 /user/ 页裸奔根因:CF Pages _headers 对同一 header 取【首个匹配规则】值, 而 combine-site 原把 /user/* 追加在官网 /* 之后 → /user/ 命中在前的官网严格 CSP (style-src 无 unsafe-inline),用户中心的大量内联样式被拦、连 API 的 connect-src 也被收窄 → 样式全丢。改为把 /user/* 规则前置到官网 /* 之前,用户中心 CSP 才生效。 Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u --- scripts/ci/combine-site.sh | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) 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