如何通过IIS URL Rewrite为3xx响应添加Content-Security-Policy头?
针对指定子路径的3xx响应添加CSP头的IIS URL Rewrite配置
核心配置示例(web.config 片段)
直接把这段配置添加到你的站点web.config的<system.webServer>节点下即可:
<configuration> <system.webServer> <rewrite> <outboundRules rewriteBeforeCache="true"> <!-- 为指定子路径的3xx响应添加CSP头 --> <rule name="Add CSP to 3xx Responses for Target Subpath" enabled="true"> <!-- 匹配3xx类响应状态码 --> <conditions logicalGrouping="MatchAll"> <add input="{RESPONSE_STATUS}" pattern="^3\d{2}$" /> <!-- 替换成你需要的目标子路径,比如/api/*或/admin/* --> <add input="{REQUEST_URI}" pattern="^/your-target-subpath/.*" /> </conditions> <!-- 保持原响应状态,仅添加CSP头 --> <action type="CustomResponse" statusCode="{RESPONSE_STATUS}" statusReason="{RESPONSE_STATUS_REASON}" statusDescription="{RESPONSE_STATUS_DESCRIPTION}" /> <serverVariables> <!-- 替换为你的实际CSP规则,按需调整 --> <set name="RESPONSE_Content_Security_Policy" value="default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:;" /> </serverVariables> </rule> </outboundRules> </rewrite> </system.webServer> </configuration>
关键配置说明
- rewriteBeforeCache="true":保证规则在响应被缓存前执行,避免缓存缺失CSP头的旧响应
- 条件匹配:同时满足两个条件才触发规则——响应状态是3xx,原始请求URL属于指定子路径
- serverVariables设置:
RESPONSE_Content_Security_Policy是IIS识别的响应头变量名,必须大写、下划线分隔,值替换成你的合规CSP规则 - CustomResponse动作:完整保留原3xx响应的状态码、描述,只追加CSP头,不改变跳转逻辑
验证方法
配置生效后,用curl或浏览器开发者工具测试目标子路径的3xx跳转:
curl -I http://your-domain.com/your-target-subpath/any-redirect-url
查看响应头是否包含Content-Security-Policy字段即可。
内容的提问来源于stack exchange,提问作者abellos
相关产品推荐
相关产品推荐

