Почему мое условие %{REQUEST_METHOD} не работает в моем файле apache .conf
Я пытался свести к минимуму случаи, когдаAccess-Control-Allow-Origin
отправляется в ответ только на некоторые конкретные сценарии, например, только на определенные методы запроса. В этой ситуации мы уже включили заголовок ответа во все запросы к определенному каталогу, но затем после добавленияIf
условие ниже, похоже, больше не работает.
<Directory "/var/www/myapp">
<If "%{REQUEST_METHOD} == 'HEAD'">
Header set Access-Control-Allow-Origin 'https://some.example.com'
</If>
</Directory>
Более того, я также пытался отладить это различными способами, и, насколько я могу судить, переменная не разрешается правильно. Вот тесты, которые я провел, чтобы это определить.
✔ Ни одно условие не включает ожидаемый заголовок.
<Directory "/var/www/myapp">
Header set Access-Control-Allow-Origin 'https://some.example.com'
</Directory>
✔ Условие, которое всегда должно быть истинным, включает заголовок, как и ожидалось.
<Directory "/var/www/myapp">
<If "'HEAD' == 'HEAD'">
Header set Access-Control-Allow-Origin 'https://some.example.com'
</If>
</Directory>
❌ Добавьте заголовок, чтобы отобразить значение, разрешенное
%{REQUEST_METHOD}
кажется, ломает Apache, ответ возвращается без заголовков, это выглядит как ошибка при обработке.
<Directory "/var/www/myapp">
Header set X-Method "%{REQUEST_METHOD}"
Header set Access-Control-Allow-Origin 'https://some.example.com'
</Directory>
Я не могу отделаться от мысли, что у меня, должно быть, какой-то синтаксис неправильный, но я все проверил несколько раз, и мне ничего не показалось.
1 ответ
Я нашел обходной путь, который, кажется, работает для меня до сих пор, но я все еще хочу понять, почему моя первоначальная попытка использоватьIf
условные обозначения не сработали. Для меня обходной путь ниже менее читаем, чем моя первоначальная попытка.
<Directory "/var/www/myapp">
RewriteCond %{REQUEST_METHOD} 'HEAD'
RewriteRule ^ - [ENV=cors:true]
Header set Access-Control-Allow-Origin 'https://some.example.com' env=cors
</Directory>
Обратите внимание на следующие ссылки, которые помогли мне найти этот обходной путь: