我在 apache 中有一个太长的标头,所以我想将其变成一个子集。标头是一个字符串,我试图让它成为这个子集:WANTED_SUBSTRING_MATCH(介于两者之间的所有内容)[但不包括第一个冒号]。它在正则表达式中是:/wanted_substring_match(.+)[^:]/
在 apache 中可以实现这一点吗?我一直试图这样<If>
做,但无济于事。我也试过了:<If %{MY-Header} =~ /wanted_substring_match(.+)[^:]/>
但它不匹配……这可能是因为=~
关键字意味着完全匹配?
答案1
在 Apache 表达式中,它应该是 %{HTTP:MY-Header},以匹配您的标头。并且 (.+) 应该位于 [^:] 之后,以匹配除冒号之外的任何内容。
答案2
您可以直接编辑标题,无需<If/>
:
# replace 'My-Header:want_foo:bar' with 'My-Header:want_foo'
RequestHeader edit My-Header ^(want_[^:]*).* $1
# alternative: replace colon and any following characters with an empty string
#RequestHeader edit My-Header :.* ""
例如<If>
:
# forbid access to headers starting with `want_`
# containing NOT a colon anywhere
<If "! %{HTTP:My-Header} =~ /^want_.*:/">
Require all denied
</If>