.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についても同様のトピックがありましたが、結論は長い行をそのまま処理することでした(長い正規表現を扱っていたため、追加ソリューションは機能しませんでした)。これはApacheにも当てはまりますか?


あなたの各サブストリングの後でホールディングシフトとエンターを押すとうまくいきますか?
StixO 2016年

@StixOいいえ、この問題は、Apacheがconfファイル内の文字列を解析する方法に関連しています。一般に(通常はHTML)エディターは、このようなショートカットを使用して、改行(<br />など)と段落の区切り(</ p>)を区別します。これは、解析されるマークアップ形式とエディターに依存します。Apache confファイルは純粋なテキストであるため、段落と行の間に区別はありません(修飾子に関係なく、Enterは\ nや\ rのようなシステムに依存する単一の復帰文字を生成します)。
MaxPRafferty 2016

回答:


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
kasperd

1
@kasperd実行する必要がありますa2enmod headers
MaxPRafferty 2016年

@BazzaDPおもしろい!これはサーバーがエスケープされた改行を送信することを期待しますが、それは私が望む方法を連結しているようであり、クライアントの観点からは感知できません。
MaxPRafferty 2016年

1
うわー、実際には、明らかにこの方法で空白文字をエスケープできます。\ <tab>でも動作することを確認しました。.htaccessがこれほど美しく見えることはありません!
MaxPRafferty 2016年

1
ええと、正規表現を解体するために働く!@BazzaDP、私が述べたnginxの質問にもこの回答をドロップしたいと思うかもしれませんが、そこでも機能する可能性があります。
MaxPRafferty 2016年

5

はい-バックスラッシュは行継続として機能します。これは、[ https://httpd.apache.org/docs/2.4/configuring.html#page-header]の Apache 2.4ドキュメントに埋め込まれています。

重要なルール:

  1. 行内の空白は問題ありません。任意の数のタブとスペース。
  2. 最後の行を除くすべての行の最後の文字はバックスラッシュでなければなりません ; <
  3. 最後の行はバックスラッシュで終わってはいけませ
  4. Apacheコメント文字(#)使用して行をコメント化することはできません

これらのルールに従わない場合、サーバーはエラー500で応答します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.