Memecah garis panjang dalam file .htaccess

10

Saya menetapkan header Kebijakan-Konten-Keamanan di file .htaccess saya, dan itu telah berkembang menjadi satu baris yang sangat panjang, yang sulit untuk dikelola. Apakah ada cara untuk memecah baris ini menjadi substring yang lebih mudah dikelola?

Sebagai contoh sepele, katakan saya sedang mengatur seperti header

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

Saya dapat (tanpa memecahkan masalah yang jelas) menyelesaikan kasus spesifik saya dengan sesuatu seperti

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

tapi itu akan memasukkan koma ke dalam string, jadi saya masih penasaran apakah ada jawaban yang lebih baik yang bisa diterapkan secara umum, tanpa menambahkan karakter tambahan pada respons.

Apa yang ideal adalah jika ada beberapa karakter gabungan yang dapat saya gunakan untuk memecah string menjadi bagian-bagian yang lebih kecil, seperti

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

atau

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

atau

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

Atau, jika saya bisa mengatur semacam variabel dan hanya membuang isinya untuk melakukan sesuatu seperti

a="default-src http://domainA.com;"
b=" script-src http://domainB.com"
Header set Content-Security-Policy $a$b

itu juga akan jauh lebih mudah dikelola.

Ada topik serupa yang muncul untuk nginx dan kesimpulannya adalah hidup dengan garis panjang (mereka berhadapan dengan regex yang panjang, sehingga solusi tambahan tidak akan berhasil); Apakah itu akan menjadi kasus untuk Apache juga?

MaxPRafferty
sumber
Akankah Memegang shift dan menekan enter setelah masing-masing substring Anda melakukan trik?
StixO
@ StixO Tidak, masalah ini berkaitan dengan bagaimana apache mem-parsing string dalam file conf. Editor umumnya (biasanya HTML) akan menggunakan pintasan seperti itu untuk membedakan antara jeda baris (katakanlah, <br />) dan jeda paragraf (</p>). Ini akan tergantung pada format markup yang diuraikan, dan editor. File conf Apache adalah teks murni, dan karenanya tidak memiliki perbedaan antara satu baris paragraf (terlepas dari pengubah, enter menghasilkan karakter carriage-return kembali yang bergantung pada sistem seperti \ n atau \ r).
MaxPRafferty

Jawaban:

14

Berikut ini harus bekerja:

 Header set Content-Security-Policy "default-src http://domainA.com; \
      script-src http://domainB.com"
Barry Pollard
sumber
Saya menguji ini dan mendapatkannya Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration.
kasperd
1
@kasperd Anda harus menjalankana2enmod headers
MaxPRafferty
@BazzaDP Menarik! Saya akan berharap bahwa ini akan menyebabkan server mengirim baris baru yang lolos, tetapi sepertinya itu sesuai dengan yang saya inginkan, dan tidak terlihat dari perspektif klien.
MaxPRafferty
1
Wow, sebenarnya, jelas Anda bisa lolos dari karakter spasi apa pun dengan cara ini. Dikonfirmasi bekerja dengan \ <tab> juga. .htaccess tidak akan pernah terlihat sebagus ini!
MaxPRafferty
1
Huh, bahkan bekerja untuk memecah regex! @ BazzaDP, Anda mungkin ingin menjatuhkan jawaban ini pada pertanyaan nginx yang saya sebutkan juga, mungkin bekerja di sana juga.
MaxPRafferty
5

Ya - garis miring terbalik berfungsi sebagai garis-kelanjutan . Ini terkubur dalam dokumentasi Apache 2.4 di [ https://httpd.apache.org/docs/2.4/configuring.html#page-header]

Aturan penting:

  1. Spasi putih dalam sebuah garis baik-baik saja, yaitu. sejumlah tab dan spasi;
  2. Karakter terakhir pada semua baris kecuali yang terakhir harus berupa garis miring terbalik; <
  3. Baris terakhir tidak boleh diakhiri dengan garis miring terbalik;
  4. Karakter komentar Apache (#) tidak dapat digunakan untuk mengomentari suatu baris.

Jika aturan ini tidak dipatuhi, server akan merespons dengan Kesalahan 500.

Steve GS
sumber