Question Couper une longue ligne dans un fichier .htaccess


Je mets un en-tête Content-Security-Policy dans mon fichier .htaccess, qui est devenu une simple ligne extrêmement longue, ce qui est un problème de gestion. Existe-t-il un moyen de diviser cette ligne en sous-chaînes plus gérables?

Comme exemple trivial, disons que je mets un en-tête comme

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

Je peux (sans problèmes évidents de rupture) accomplir mon cas spécifique avec quelque chose comme

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

mais cela va insérer des virgules dans la chaîne, donc j'étais toujours curieux de savoir s'il y avait une meilleure réponse qui pourrait être appliquée de manière générale, sans ajouter les caractères supplémentaires à la réponse.

L’idéal serait qu’il y ait un caractère de concaténation que je pourrais utiliser pour diviser la chaîne en parties plus petites, comme

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

ou

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

ou

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

Sinon, si je pouvais définir une sorte de variable et vider leur contenu pour faire quelque chose comme

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

ce serait aussi beaucoup plus gérable.

Il y avait un sujet similaire qui est venu pour nginx et la conclusion était juste de vivre avec les longues lignes (elles traitaient avec une longue expression rationnelle, de sorte que la solution append n'aurait pas fonctionné); Est-ce que cela va aussi être le cas pour Apache?


7
2018-01-27 18:13


origine


Tenir Maj et appuyer sur Entrée après chacune de vos sous-chaînes fera l'affaire. - StixO
@StixO Non, ce problème concerne la manière dont Apache analyse les chaînes dans les fichiers de configuration. Généralement (généralement HTML), les éditeurs utilisent ce raccourci pour différencier les sauts de ligne (par exemple, <br />) des sauts de paragraphe (</ p>). Cela dépendra du format de balisage analysé et de l'éditeur. Les fichiers de configuration Apache sont du texte pur et, en tant que tels, ils ne différencient pas une ligne d'un paragraphe (quel que soit le modificateur, enter produit un seul caractère de retour à la ligne dépendant du système, comme \ n ou \ r). - MaxPRafferty


Réponses:


Ce qui suit devrait fonctionner:

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

9
2018-01-27 18:41



J'ai testé cela et j'ai Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration. - kasperd
@kasperd vous avez besoin de courir a2enmod headers - MaxPRafferty
@BazzaDP Intéressant! Je suppose que cela entraînerait l'envoi par un serveur d'un saut de ligne échappé, mais il semble que cela concatte comme je le souhaiterais et qu'il est imperceptible du point de vue des clients. - MaxPRafferty
Wow, en fait, évidemment, vous pouvez échapper à tout caractère blanc de cette façon. Confirmé de travailler aussi avec \ <tab>. .htaccess n'aura jamais été aussi beau! - MaxPRafferty
Huh, même travaille pour casser regex! @ BazzaDP, vous voudrez peut-être laisser tomber cette réponse à la question de Nginx que j'ai également mentionnée, elle pourrait également fonctionner ici. - MaxPRafferty


Oui - la barre oblique inverse fonctionne comme un continuation de ligne. Ceci est enterré dans la documentation Apache 2.4 sur [https://httpd.apache.org/docs/2.4/configuring.html#page-header]

Règles importantes:

  1. Les espaces dans une ligne sont corrects, c.-à-d. un nombre quelconque d'onglets et d'espaces;
  2. Le dernier caractère de toutes les lignes sauf le dernier doit être un antislash; <
  3. La dernière ligne doit ne pas se terminer par une barre oblique inverse;
  4. Le caractère de commentaire Apache (#) ne peux pas être utilisé pour commenter une ligne.

Si ces règles ne sont pas respectées, le serveur répondra par une erreur 500.


4
2018-03-10 12:53