我在 .htaccess 文件中设置了 Content-Security-Policy 标头,但它已经变成了一行非常长的文字,管理起来很麻烦。有没有办法把这一行拆分成更易于管理的子字符串?
举一个简单的例子,假设我正在设置一个像这样的标题
Header set Content-Security-Policy "deafult-src http://domainA.com; script-src http://domainB.com"
我可以(没有明显的破坏问题)用类似的东西来完成我的具体案例
Header append Content-Security-Policy "default-src http://domainA.com;"
Header append Content-Security-Policy "script-src http://domainB.com"
但这会在字符串中插入逗号,所以我仍然很好奇是否有一个更好的答案可以普遍应用,而无需在响应中添加额外的字符。
理想的情况是,如果有一些连接字符,我可以用它把字符串分成更小的部分,比如
Header set Content-Security-Policy "default-src http://domainA.com;"
\" script-src http://domainB.com"
或者
Header set Content-Security-Policy "default-src http://domainA.com;"^
" script-src http://domainB.com"
或者
Header set Content-Security-Policy "default-src http://domainA.com;"
+" script-src http://domainB.com"
或者,如果我可以设置某种变量并转储其内容来执行类似操作
a="default-src http://domainA.com;"
b=" script-src http://domainB.com"
Header set Content-Security-Policy $a$b
这也将更加易于管理。
有一个类似话题也出现在 nginx 上结论就是只能忍受长行(他们处理的是很长的正则表达式,因此附加解决方案不起作用);Apache 也会这样吗?
答案1
以下应该有效:
Header set Content-Security-Policy "default-src http://domainA.com; \
script-src http://domainB.com"
答案2
是的 - 反斜杠的作用是行延续。这隐藏在 Apache 2.4 文档中 https://httpd.apache.org/docs/2.4/configuring.html#page-header
重要规则:
- 行内的空白是可以的,即任意数量的制表符和空格;
- 除最后一行外所有行的最后一个字符必须是反斜杠;<
- 最后一行必须不是以反斜杠终止;
- Apache 注释字符 (#)不能用于注释掉某一行。
- 你不能破坏[旗帜]
如果不遵守这些规则,服务器将响应错误 500。
请注意,在编辑*.conf
文件时您可以使用它C:\Apache24\bin>httpd -t
来检查语法。