Apache Header 中的下划线被覆盖

Apache Header 中的下划线被覆盖

我有一个设置标头 x-user_type 的服务。由于 Apache2.4.33 无法使用此功能,我将使用 .htaccess 中的以下内容对其进行转换:

<IfModule mod_headers.c>
    <IfModule mod_setenvif.c>
        SetEnvIfNoCase ^x.user.type$ ^(.*)$ fix_x-user_type=$1
        RequestHeader set x-user-type %{fix_x-user_type}e env=fix_x-user_type
    </IfModule>
</IfModule>

但是如果我在请求中提供 x-user-type,那么响应中的 x-user-type 值将被覆盖

例子:

  • 未提供任何内容 -> x-user-type = application(由服务设置)
  • x-user_type = test -> x-user-type = application (这是可以的,因为它是由服务设置的)
  • x-user-type = test -> x-user-type = test (这也应该是应用程序)

我认为这是一个 Apache 配置问题。有人能帮我解决这个问题吗?

答案1

用这个解决了我自己的问题:https://serverfault.com/a/900745/490242

引用:

a 的值RequestHeader set支持表达式,表达式包括req(或 http) 函数,它为您提供请求标头的值。因此,这个指令应该可以满足您的要求:

RequestHeader set X-CAS-email-primary "expr=%{req:X-CAS-email_primary}" 您必须深入研究文档才能找到这种东西,但它就在那里。

不确定为什么你的配置不起作用,但我猜 SetEnvIfNoCase 是在 RequestHeader 之后评估的。文档并不容易弄清楚这一点。

看来SetEnvIfNoCase这也是我的问题。

相关内容