Розбийте довгий рядок у файлі .htaccess


10

Я встановлюю заголовок Content-Security-Policy у своєму файлі .htaccess, і він перетворився на надзвичайно довгий одиночний рядок, який нелегко керувати. Чи є спосіб розбити цей рядок на більш керовані підрядки?

Як тривіальний приклад, скажіть, я встановлюю на зразок заголовка

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

@StixO Ні, ця проблема стосується того, як apache аналізує рядки у файлах conf. Загалом (зазвичай HTML) редактори використовують такий ярлик для розмежування між розривами рядків (скажімо, <br />) та розривами абзаців (</p>). Це залежатиме від формату розмітки, який аналізується, та редактора. Файли Apache conf є чистим текстом, і як такі не мають диференціації між рядком абзацом (незалежно від модифікатора, enter створює єдиний, залежний від системи символ повернення каретки, як \ n або \ r).
MaxPRafferty

Відповіді:


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

@BazzaDP Цікаво! Я б очікував, що це призведе до того, що сервер надішле вийшов новий рядок, але, схоже, він формулює так, як я хотів би, і непомітний з точки зору клієнтів.
MaxPRafferty

1
Нічого, власне, очевидно, ви можете уникнути будь-якого персонажа пробілу таким чином. Підтверджено також роботу з \ <tab>. .htaccess ніколи не виглядав би так добре!
MaxPRafferty

1
Ага, навіть працює на те, щоб розбити регекс! @BazzaDP, можливо, ви захочете опустити цю відповідь на те питання nginx, про яке я також згадував, і там може працювати.
MaxPRafferty

5

Так - зворотний проріз працює як продовження рядка . Це поховано в документації Apache 2.4 на [ https://httpd.apache.org/docs/2.4/configuring.html#page-header]

Важливі правила:

  1. Пробіл всередині рядка - це добре, тобто. будь-яка кількість вкладок і пробілів;
  2. Останній символ у всіх рядках, крім останнього, повинен бути зворотним косою рисою;
  3. Завершальний рядок не повинен закінчуватися відхиленням;
  4. Символ коментаря Apache (#) не можна використовувати для коментування рядка.

Якщо ці правила не будуть дотримані, сервер відповість помилкою 500.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.