我们有一个场景,我们在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进行编码?
答案 0 :(得分:1)
是的,有办法做到这一点。
为此,您希望使用带有MapType“prg”的RewriteMap。
所以你要定义像
这样的RewriteMapRewriteEngine 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.html和http://httpd.apache.org/docs/2.0/rewrite/rewrite_guide_advanced.html上的“prg”示例