如何base64编码apache头?

Mar*_*man 4 apache mod-rewrite base64 http-headers

我正在使用apache作为前端http代理.我需要将一个带有特定环境变量值的标头发送到所有代理请求.像这样:

RequestHeader set myheader %{FOO}e
Run Code Online (Sandbox Code Playgroud)

问题是env变量的值FOO必须是base64编码的.是否可以动态地对该标头值进行b64编码?

mod_rewrite的?子请求?自定义模块?...

顺便说一句,env变量是由另一个apache模块创建的,遗憾的是我无法修复.

Mar*_*man 6

我想到了.使用mod_rewrite从外部程序读取/写入stdin/stdout,如下所示:

ProxyRequests on
RewriteEngine on

# 1 
RewriteMap base64map "prg:/bin/b64e" 

# 2
RewriteRule .* - [E=WIC:${base64map:%{QUERY_STRING}},NE]  

# 3
RequestHeader set x-b64encoded "%{WIC}e" 

# 4
RewriteRule ^proxy/.*$ http://localhost:9999 [P]
Run Code Online (Sandbox Code Playgroud)
  1. 创建一个名为的rewrite-map base64map,它运行可执行文件(/bin/b64e),它读取stdin并在stdout上编码.
  2. 重写规则将查询字符串(或任何您想要的)传递给名为的映射base64map.输出用于将apache变量WIC设置为编码值.
  3. 请求标头x-b64encoded是从值中创建的WIC
  4. 最后,请求被代理到目的地,并且标头自动包含在请求中.


Rob*_*sen 5

将表达式base64 函数一起使用也应该有效:

RequestHeader set myheader "expr=%{base64:%{FOO}e}"
Run Code Online (Sandbox Code Playgroud)

成功使用它对客户端证书执行额外的 Base64 编码传递,如下所示:

RequestHeader set X-ENV-SSL_CLIENT_CERTIFICATE "expr=%{base64:%{SSL_CLIENT_CERT}s}"
Run Code Online (Sandbox Code Playgroud)