在.htaccess文件中分行


10

我在.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,有一个类似的话题,其结论只是为了适应冗长的行(他们正在处理一个长的正则表达式,因此append解决方案将行不通)。Apache也是如此吗?


在每个子字符串之后,Holding shift和按下Enter会成功吗?
StixO

@StixO不,这个问题与apache如何解析conf文件中的字符串有关。通常,(通常是HTML)编辑器会使用这种快捷方式来区分换行符(例如<br />)和段落换行符(</ p>)。这将取决于要解析的标记格式和编辑器。Apache conf文件是纯文本,因此在段落与段落之间没有任何区别(无论是否使用修饰符,enter都会产生一个与系统相关的单个回车符,例如\ n或\ r)。
MaxPRafferty '16

Answers:


14

以下应该工作:

 Header set Content-Security-Policy "default-src http://domainA.com; \
      script-src http://domainB.com"

我对此进行了测试并得到了Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration
卡巴斯德,2016年

1
@kasperd,您需要运行a2enmod headers
MaxPRafferty,2016年

@BazzaDP有趣!我希望这会导致服务器发送转义的换行符,但是似乎它与我想要的方式保持一致,并且从客户端的角度来看是无法察觉的。
MaxPRafferty

1
哇,实际上,您显然可以通过这种方式转义任何空白字符。确认也与\ <tab>一起使用。.htaccess永远不会看起来那么好!
MaxPRafferty

1
呵呵,甚至还可以分解正则表达式!@BazzaDP,您可能想把这个答案也放到我提到的Nginx问题上,也可以在那儿工作。
MaxPRafferty

5

是的-反斜杠可以作为换行符。它埋在[ https://httpd.apache.org/docs/2.4/configuring.html#page-header]上的Apache 2.4文档中。

重要规则:

  1. 一行内的空格很好,即。任意数量的制表符和空格;
  2. 除最后一行外,所有行上的最后一个字符必须为反斜杠; <
  3. 最后一行不能以反斜杠结尾。
  4. Apache注释字符(#)不能用于注释掉一行。

如果不遵守这些规则,则服务器将以错误500进行响应。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.