http 标头正则表达式匹配 apache

http 标头正则表达式匹配 apache

我在 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>   

相关内容