mod_rewriteを使用してApachehttpd2.2.15(Unix)を使用しています
私はこの書き直しを行っています:
RewriteEngine On
RewriteLogLevel 7
RewriteMap encode-map prg:/var/www/centos6.local/encode.pl
RewriteLog "/var/log/httpd/centos6.local-rewrite_log"
RewriteCond %{QUERY_STRING} CID=(.*)
RewriteRule .* - [L,CO=NDD_COOKIE:${encode-map:%1}:ndipiazza.test.local:50000]
これの目的は、クエリ文字列のどこかにCID=xyzが見つかったかどうかを検出することです。その場合は、カスタムperlスクリプト/var/www/centos6.local/encode.plによってエンコードされたxyzを使用してCookieNDD_COOKIEを作成します。
これにより、Cookieが一度だけ設定され、サーバーが完全に再起動するまでCookieが再度設定されることはありません。
0)ndpiazza.test.localが192.168.2.7を指すようにhostsファイルを設定します
1)http://ndipiazza.test.local/test.html?CID=test123を起動します
結果:エンコードされたCookieは期待どおりに書き込まれます
2)新しいブラウザに切り替えるか、ブラウズキャッシュをクリアします。
3)http://ndipiazza.test.local/test.html?CID=new567を起動します
結果:Cookieは書き込まれません!
なぜこうなった?
これが機能しなかったときのhttp://ndipiazza.test.local/test.html?UID=sfsfsfd888mの書き換えログです。
192.168.2.3 - - [28/Jun/2012:16:33:29 --0500] [ndipiazza.test.local/sid#7fc041c0c880][rid#7fc041d34608/initial] (2) init rewrite engine with requested uri /test.html
192.168.2.3 - - [28/Jun/2012:16:33:29 --0500] [ndipiazza.test.local/sid#7fc041c0c880][rid#7fc041d34608/initial] (3) applying pattern '.*' to uri '/test.html'
192.168.2.3 - - [28/Jun/2012:16:33:29 --0500] [ndipiazza.test.local/sid#7fc041c0c880][rid#7fc041d34608/initial] (4) RewriteCond: input='UID=sfsfsfd888' pattern='UID=(.*)' => matched
192.168.2.3 - - [28/Jun/2012:16:33:29 --0500] [ndipiazza.test.local/sid#7fc041c0c880][rid#7fc041d34608/initial] (5) map lookup OK: map=encode-map key=sfsfsfd888 -> val=
192.168.2.3 - - [28/Jun/2012:16:33:29 --0500] [ndipiazza.test.local/sid#7fc041c0c880][rid#7fc041d34608/initial] (5) setting cookie 'WS_CUID=ndipiazza.test.local; path=/; domain=50000'
192.168.2.3 - - [28/Jun/2012:16:33:29 --0500] [ndipiazza.test.local/sid#7fc041c0c880][rid#7fc041d34608/initial] (1) pass through /test.html