Я использую следующую конфигурацию Apache для проверки наличия определенных заголовков в моих запросах:
<LocationMatch /test-headers/>
<RequireAll>
Require expr %{HTTP:header1} == 'abc'
Require expr %{HTTP:header2} == 'def'
</RequireAll>
</LocationMatch>
Это отлично работает с Apache 2.3 и более поздними версиями, поскольку "RequireAll" поддерживается в authz_core_module [1].
Есть ли способ добиться того же с Apache 2.2.22?
[1] https://httpd.apache.org/docs/trunk/mod/mod_authz_core.html
Apache 2.2 не понимает, поэтому мы используем RewriteCond. И поскольку RewriteCond не позволяет проводить тестирование на несовпадения, мы сопоставляем сначала желаемый случай (header1 имеет abc, header2 имеет def), и пусть он передать, пометив RewriteRule как [L], "последнее правило, не обрабатывать любые другие соответствующие правила RewriteRules после этого "), а затем RewriteRule, которое соответствует всем остальным случаям и позволяет им сбой через '[F]', "не выполнить запрос".
RewriteCond %{HTTP:header1} =abc
RewriteCond %{HTTP:haeder2} =def
RewriteRule ^/test-headers/.* - [L]
RewriteRule ^/test-headers/.* - [F]
Решение найдено Йоханнесом Шинделином: https://github.com/git/git/commit/f1f2b45be0a2b205fc07758e0f4e9c13e90d34d9