Поиск и замена регулярных выражений при редактировании заголовка Apache - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть следующий код в файле .htaccess

<IfModule mod_headers.c>
        Header set Content-Security-Policy "base-uri http://site.local/"
        Header append Content-Security-Policy "default-src 'none'"
        Header append Content-Security-Policy "connect-src 'self'"
        Header append Content-Security-Policy "style-src 'self'"
        Header edit Content-Security-Policy "," ";"
</IfModule>

, который генерирует следующий заголовок ответа от сервера:

Content-Security-Policy base-uri http://site.local/, default-src 'none', connect-src 'self', style-src 'self'

Я хочу получить эту строку с точкой с запятойзапятых, как это:

Content-Security-Policy base-uri http://site.local/; default-src 'none'; connect-src 'self'; style-src 'self'

Использование добавления или слияния в Apache mod_headers разделяет различные добавления к заголовку, предварительно установленному с запятой , как кажется, указывает стандарт, но W3C требует, чтобы различные конфигурации Политики безопасности контента были разделены точкой с запятой .

Я не могу найти способ написать строку редактирования заголовка вместо ','с ';'согласно состояниям W3C.

Я пробовал много вариантов для поиска, я знаю, что некоторые из них ошибочны, но так как я не получаю ожидаемых результатов, я пробую все, что могу придумать.

Я пробовал шаблоны, подобные этой:

  • "," с и без кавычек, оба заменяют только первое вхождение.
  • /, / с и без кавычек, ничегопроисходит.
  • /, / g с кавычками и без, ничего не происходит.
  • ...

Чего мне не хватает?

1 Ответ

0 голосов
/ 24 сентября 2018

Директива Header принимает два разных аргумента для выполнения подстановки.У того, кто выполняет глобальное совпадение, есть конечная звездочка edit*.Из документов :

Форма edit будет совпадать и заменяться ровно один раз в значении заголовка, тогда как форма edit* будет заменять каждый экземпляр шаблона поиска, если онпоявляется более одного раза.

Вам нужно edit* как в:

Header edit* Content-Security-Policy , ;
...