You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过.htaccess仅为网站非/admin/区域设置CSP Header?

解决CSP Header仅对非/admin/区域生效的问题

问题原因分析

你当前的<If>条件正则%{REQUEST_URI} !~ /admin/匹配逻辑不够精准,且CSP指令存在语法缺失(末尾未闭合双引号),导致规则未正确生效。另外,Apache的<If>指令在部分环境下可能和Rewrite规则存在优先级冲突,不如基于环境变量的方式可靠。

可行解决方案

方案1:修正<If>块的正则与语法

将原配置替换为以下代码,确保精准排除以/admin/开头的请求,并补全CSP指令的语法:

<If "%{REQUEST_URI} !~ ^/admin/">
    Header always set Content-Security-Policy "default-src 'self';"
</If>
  • ^/admin/锚定URI开头,避免误匹配包含admin字符串的其他路径
  • 补全CSP指令末尾的双引号,修复语法错误

方案2:使用SetEnvIf+环境变量控制(更推荐)

这种方式兼容性更好,不受Rewrite规则影响:

# 标记/admin/开头的请求为不需要CSP
SetEnvIf Request_URI ^/admin/ no_csp=1

# 仅对未标记no_csp的请求设置CSP Header
Header always set Content-Security-Policy "default-src 'self';" env=!no_csp
  • SetEnvIf会为所有以/admin/开头的请求设置no_csp环境变量
  • env=!no_csp表示仅当该环境变量不存在时,才添加CSP Header

注意事项

  • 确保将上述配置放在.htaccess的Rewrite规则之前,避免优先级问题
  • 测试时可通过浏览器开发者工具的Network面板查看/admin/请求的响应头,确认CSP未被添加

内容的提问来源于stack exchange,提问作者guru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 06:37:24