Назад | Перейти на главную страницу

<requireall> / Требовать эквивалент expr в Apache 2.2.22 для проверки заголовков?</requireall>

Я использую следующую конфигурацию 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