如何base64编码apache头?

时间:2014-01-09 22:21:18

标签: apache mod-rewrite http-headers base64

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

RequestHeader set myheader %{FOO}e

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

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

顺便说一句,env变量是由另一个apache模块创建的,遗憾的是我无法解决这个问题。

2 个答案:

答案 0 :(得分:5)

我明白了。使用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]
  1. 创建一个名为base64map的重写映射,它运行可执行文件(/bin/b64e),它读取stdin并在stdout上编码。
  2. 重写规则将查询字符串(或任何您想要的内容)传递给名为base64map的映射。输出用于将apache变量WIC设置为编码值。
  3. 请求标头x-b64encoded是根据WIC
  4. 中的值创建的
  5. 最后,请求被代理到目的地,并且标头会自动包含在请求中。

答案 1 :(得分:1)

expressionbase64 function一起使用也应该有效:

RequestHeader set myheader "expr=%{base64:%{FOO}e}"

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

RequestHeader set X-ENV-SSL_CLIENT_CERTIFICATE "expr=%{base64:%{SSL_CLIENT_CERT}s}"