Набор условных заголовков htaccess игнорирует условие

Я пытаюсь установить заголовки, если источником является конкретный сайт, чтобы разрешить конфликт ресурсов, который у меня есть (с использованием Mautic, размещенного на поддомене) .

Если я добавляю заголовки для любой ситуации, я получаю ошибку 500 при попытке использовать Mautic, но ресурс, к которому осуществляется доступ с моего сайта, работает, поэтому я хочу установить их только тогда, когда мой сайт является источником.

Это то, что у меня есть:

RewriteEngine On
#preserve HTTP(S)
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [env=proto:https]
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [env=proto:http]

<IfModule mod_headers.c>
    SetEnvIfNoCase Origin %{ENV:proto}://mysite.com ENV_SET
    SetEnvIfNoCase Origin %{ENV:proto}://mautic.mysite.com ENV_SET=0
    Header add Access-Control-Allow-Origin %{ENV:proto}://mysite.com env=ENV_SET
    Header set Access-Control-Allow-Credentials true env=ENV_SET
    Header set Access-Control-Allow-Methods: GET, POST, PATCH, PUT, OPTIONS env=ENV_SET
    Header set Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token env=ENV_SET
</IfModule>

Насколько я понял, при этом заголовки будут устанавливаться условно при наличии переменной окружения, но они устанавливаются несмотря ни на что. Если я удалю строки SetEnvIf, они все еще будут установлены. Я нашел этот , в котором предлагается поместить его в конфигурацию вместо .htaccess, но я не уверен, что это значит.

Есть предложения по поводу того, как я могу это исправить или как-то иначе заставить это работать?

Спасибо

EDIT: синтаксис обновлен с советом от w3dk, теперь выглядит как

    SetEnvIfNoCase Origin "%{ENV:proto}://mysite.com" ENV_SET
    SetEnvIfNoCase Origin "%{ENV:proto}://mautic.mysite.com" !ENV_SET
    Header set Access-Control-Allow-Origin "%{ENV:proto}://mysite.com" env=ENV_SET
    Header set Access-Control-Allow-Credentials "true" env=ENV_SET
    Header set Access-Control-Allow-Methods "GET, POST, PATCH, PUT, OPTIONS" env=ENV_SET
    Header set Access-Control-Allow-Headers "Origin, Content-Type, X-Auth-Token" env=ENV_SET

EDIT 2: Оказывается, нет ' Мне нравится часть% {ENV: proto}, поэтому я изменил ее на http и добавил еще одну строку для https. Поддомен работает нормально, и заголовки настраиваются, за исключением того, что я получаю «Флаг учетных данных -« true », но заголовок« Access-Control-Allow-Credentials »имеет значение« true, true ». в консоли. Он устанавливается только один раз (я также пробовал «объединить», и я использую set для Allow-Origin; я не могу понять, где еще это будет установлено.

2
задан 23 May 2017 в 15:41
1 ответ
 Набор заголовков Access-Control-Alloww-Methods: ДОСТАТЬ, ПОСТ, ЗАПЛАТИТЬ, ПОЛОЖИТЬ, ВАРИАНТЫ env=ENV_SET

Если значение содержит пробелы, то оно должно быть окружено двойными кавычками. Наверное, безопаснее, если всегда заключать значение в кавычки. Также следует опустить : в конце имени заголовка. Так, например:

Header set Access-Control-Allow-Methods "GET, POST, PATCH, PUT, OPTIONS" env=ENV_SET
SetEnvIfNoCase Origin %{ENV:proto}://mautic.mysite.com ENV_SET=0

UPDATE: Третий аргумент к SetEnvIf[NoCase] - регекс, поэтому переменные сервера server (т.е. %{ENV:proto} не расширяются - они будут сопоставлены буквально. Если вам нужно сопоставить либо http, либо https, то поместите это в один регекс, например https? (The ? делает предыдущий символ необязательным). (Однако, ваш сайт должен быть либо одним, либо другим, а не обоими?)

To unset/удалить переменную окружения, вы должны префиксовать ее с помощью ! (восклицательный знак) вместо того, чтобы устанавливать ее на 0 (это все еще установлено). Например:

SetEnvIfNoCase Origin https?://mautic.mysite.com !ENV_SET

Если я удалю строки SetEnvIf, они все равно будут установлены.

Наверное, из-за того, что не удалось процитировать значение заголовка . Но это также может быть проблемой кэширования - поэтому убедитесь, что все кэши очищены.

...это должно быть помещено в конфигурацию вместо .htaccess

By "configuration" они, вероятно, ссылаются на конфигурацию server. Это было бы предпочтительнее (и отключить использование файлов .htaccess). Однако, это не является причиной данной проблемы.

.
0
ответ дан 3 December 2019 в 14:20

Теги

Похожие вопросы