/ 需要 Apache 2.2.22 中的 expr 等效项来检查标题吗?

/ 需要 Apache 2.2.22 中的 expr 等效项来检查标题吗?

我使用以下 Apache 配置来检查我的请求中的某些标头:

<LocationMatch /test-headers/>
    <RequireAll>
        Require expr %{HTTP:header1} == 'abc'
        Require expr %{HTTP:header2} == 'def'
    </RequireAll>
</LocationMatch>

这在 Apache 2.3 及更高版本中可以很好地运行,因为 authz_core_module [1] 支持“RequireAll”。

有没有办法使用 Apache 2.2.22 实现相同的功能?

[1]https://httpd.apache.org/docs/trunk/mod/mod_authz_core.html

答案1

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]

Johannes Schindelin 找到的解决方案: https://github.com/git/git/commit/f1f2b45be0a2b205fc07758e0f4e9c13e90d34d9

相关内容