![/ 需要 Apache 2.2.22 中的 expr 等效项来检查标题吗?](https://linux22.com/image/682423/%2F%20%E9%9C%80%E8%A6%81%20Apache%202.2.22%20%E4%B8%AD%E7%9A%84%20expr%20%E7%AD%89%E6%95%88%E9%A1%B9%E6%9D%A5%E6%A3%80%E6%9F%A5%E6%A0%87%E9%A2%98%E5%90%97%EF%BC%9F.png)
我使用以下 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