Почему мое условие %{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>

Обратите внимание на следующие ссылки, которые помогли мне найти этот обходной путь:

Другие вопросы по тегам