如何编码mod_rewrite设置的cookie?

时间:2012-06-08 14:39:59

标签: apache mod-rewrite encode

我们有一个场景,我们在Apache 2.2的httpd.conf中使用重写规则条件从查询字符串中获取参数,并将其写为Cookie:

CustomLog "/www/apache/ndipiazza/logs/ssl_request_log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b \"%{Cookie}i\""

RewriteEngine On
RewriteCond %{QUERY_STRING} CID=(.*)
RewriteRule .* - [L,CO=COOKIE_CID:%1:ndipiazza-local.com:50000] 

例如,URL“http://ndipiazza-local/mypage.jsp?CID = NickDogg”创建一个cookie“COOKIE_CID = NickDogg”

但是,我们无法使用此解决方案,因为我们有一个限制,即我们无法将此cookie存储为明文。截至目前,它在日志中写为明文,并将cookie写为明文。我们需要对其进行编码。

有没有办法让apache对存储的cookie进行编码?

1 个答案:

答案 0 :(得分:1)

是的,有办法做到这一点。

为此,您希望使用带有MapType“prg”的RewriteMap。

所以你要定义像

这样的RewriteMap
RewriteEngine On 
RewriteMap encode-map prg:/path/to/encode_script 
RewriteCond %{QUERY_STRING} UID=(.*) 
RewriteRule .* - [L, CO=COOKIE_CID:${encode-map:%1}:ndipiazza-local.com:50000] 

/ path / to / encode_script是系统上的一个脚本,它在apache启动时启动一次,然后获取要换行的换行字符串,并且必须输出新行编码的字符串而不用stdout缓冲。

有关详细信息和示例,请参阅http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html上的“外部重写计划”部分和http://httpd.apache.org/docs/2.0/rewrite/rewrite_guide.htmlhttp://httpd.apache.org/docs/2.0/rewrite/rewrite_guide_advanced.html上的“prg”示例