あぱっちもひかんあんてなが反応したので
Apache のログで取得できる %{Foobar}n を CGI で取得するのは無理そうだし、この辺をどうにかするためには Apache モジュールを書くほかない気がするな…。
— 吉田光男 (MitsuoYoshida) (@ceekz) December 10, 2012
それApacheにパッチあてればできるよ!
--- httpd-2.2.22.orig/modules/metadata/mod_headers.c 2010-08-25 23:12:46.000000000 +0900
+++ httpd-2.2.22/modules/metadata/mod_headers.c 2012-12-11 16:51:07.000000000 +0900
@@ -200,6 +200,17 @@
return "(null)";
}
+static const char *header_request_notes_var(request_rec *r, char *a)
+{
+ const char *s = apr_table_get(r->notes,a);
+
+ if (s)
+ return unwrap_header(r->pool, s);
+ else
+ return "(null)";
+}
+
+
static const char *header_request_ssl_var(request_rec *r, char *name)
{
if (header_ssl_lookup) {
@@ -853,6 +864,7 @@
register_format_tag_handler("D", (const void *)header_request_duration);
register_format_tag_handler("t", (const void *)header_request_time);
register_format_tag_handler("e", (const void *)header_request_env_var);
+ register_format_tag_handler("n", (const void *)header_request_notes_var);
register_format_tag_handler("s", (const void *)header_request_ssl_var);
return OK;
このパッチをあてて、Apacheをビルドし直して、
CookieTracking on
RequestHeader set X-User-Track-Cookie %{cookie}n
のように設定すると、CGI側で、
HTTP_X_USER_TRACK_COOKIE => 127.0.0.1.1355212696374357
が取れました!
ちなみに CookieTracking は mod_usertrackの設定で、cookieというnotesにtracking用の値を入れてくれます。
逆にCGIからの出力をnotesに入れたい場合は、「modcopyheader ってのを書いた話 Re: Apache上のPerl FastCGIはCustomLogにデータを書くことができるか?」のエントリが参考になるよ!