0

我们有一个场景,我们在 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 进行编码?

4

1 回答 1

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/上的“prg”示例docs/2.0/rewrite/rewrite_guide.htmlhttp://httpd.apache.org/docs/2.0/rewrite/rewrite_guide_advanced.html

于 2012-06-11T19:14:47.200 回答