我有一个设置标头 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
这也是我的问题。