OpenLiteSpeed服务器配置Content-Security-Policy frame-ancestors规则失效求助
OpenLiteSpeed服务器配置Content-Security-Policy frame-ancestors规则失效求助
嘿,你这是把frame-ancestors的作用逻辑搞反啦!
你之前的配置思路有个关键误区:frame-ancestors这个CSP指令是用来指定哪些外部域名可以把你的页面嵌入到iframe里,而不是用来限定自己网站的哪些路径允许被嵌入。你写的https://example.com/video/并不是合法的域名/源,浏览器根本不识别这条规则,自然就会报错拒绝加载了。
正确的解决思路
你需要给不同路径设置差异化的CSP头:
- 对于
/video/**开头的页面,允许所有域名嵌入,也就是设置frame-ancestors *; - 对于网站其他所有页面,只允许自身域名嵌入,设置
frame-ancestors 'self';
在OpenLiteSpeed里的具体配置步骤
- 登录OpenLiteSpeed管理后台,找到对应虚拟主机
- 切换到
Rewrites标签页,点击Add添加重写规则(注意规则顺序,/video/的规则要放在最前面)- 第一条规则(匹配/video/路径):
RewriteRule ^/video/.*$ - [ENV=FRAME_POLICY:frame-ancestors *;] - 第二条规则(匹配其他所有路径):
RewriteRule ^.*$ - [ENV=FRAME_POLICY:frame-ancestors 'self';] - 最后添加全局Header规则,把环境变量里的策略输出到响应头:
Header always set Content-Security-Policy "%{FRAME_POLICY}e" env=FRAME_POLICY
- 第一条规则(匹配/video/路径):
- 保存配置后重启OpenLiteServer生效
验证配置是否正确
配置完成后:
- 访问
https://example.com/video/xxx,打开浏览器开发者工具的「网络」标签,查看响应头里的Content-Security-Policy是否为frame-ancestors *; - 访问网站首页等其他页面,确认响应头的CSP是
frame-ancestors 'self'; - 再到其他域名的页面里嵌入你的
/video/路径页面,应该就能正常加载了
备注:内容来源于stack exchange,提问作者harvey
相关产品推荐
相关产品推荐

