有没有办法在 Apache 配置中读取请求标头的值?我想避免进入 .htaccess 文件,如果我可以避免使用 SetEnvIf,那就更好了。我正在尝试在这里实施建议:https ://stackoverflow.com/a/1850482/138228
除了使用正则表达式之外,我真的找不到太多关于这个主题的内容。我正在寻找的是类似的东西:
标头集 NAME = %{value_of_different_header}%
有没有办法在 Apache 配置中读取请求标头的值?我想避免进入 .htaccess 文件,如果我可以避免使用 SetEnvIf,那就更好了。我正在尝试在这里实施建议:https ://stackoverflow.com/a/1850482/138228
除了使用正则表达式之外,我真的找不到太多关于这个主题的内容。我正在寻找的是类似的东西:
标头集 NAME = %{value_of_different_header}%
似乎解决方案是:
SetEnvIf Origin "http(s)?://(domaine1\.com|domain2\.com)$" AccessControlAllowOrigin=$0
Header always set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
但这与 .htaccess 无关,您可以将这些行放在常规 apache 配置文件(虚拟主机?)中,而无需使用坏的.htaccess 动态配置文件。
Header 指令的值部分是:
value 可以是字符串、包含格式说明符的字符串或两者的组合
但唯一可用的格式说明符是%%
(for %
)、%t
时间戳、%D
(idem)%{foo}e
和%{foo}s
环境变量。
SetenvIf
是一个很好的 apache 读取请求头的工具,这里是读取 Origin 头。然后,使用环境变量是在 Apache 中编写复杂事物的经典方式(我的意思是存储某种变量的方式)。
所以我不知道你为什么想要另一个解决方案。
如果没有 SetEnvIf,我找不到这样做的方法,但除了可以使用以下方法复制不同的标头之外,我将其作为 ReverseProxy 的一部分(因此使用 RequestHeader 而不是 Header)但两者似乎可以互换
###This reads the value of OldHeader into TempValue
SetEnvIf OldHeader ".+" TempValue=$0
###This will overwrite the value of "NewHeader" if it was already set
RequestHeader set NewHeader %{TempValue}e env=TempValue
###Optionally remove the original
RequestHeader unset OldHeader