-ヒットカウンタ空回りの回避-

この文書の適用条件

ヒットカウンタとして、インラインイメージカウンタ (IMG要素で画像として張り込む形式のもの)を利用し、 そのカウンタにカウントを増やさないで表示するモードがあること。
ウェブサーバーがApache(1.2以降)であること。カウンタを置く ページでServer Side Includesが利用できること。

何をどうしようというのか

ウェブサイト内で、トップページへ戻るためのリンクが張られている場合、 通常の設置方法で置かれているヒットカウンタでは、外部からのジャンプと サイト内からのジャンプの区別がつかないため、サイト内部からリンクにより トップページに戻るとカウントが増えてしまう。 これを防止する方法として、ウェブブラウザより提供される リファラ情報(リンク元のページのURL)を解析することで サイト内からのジャンプとそれ以外を区別し、 それぞれの場合で別々のIMG要素を出力して サイト内からの場合カウントの増えないモード、 それ以外の場合カウントの増えるモード、でヒットカウンタが 呼び出されるようにする。

設定例

今、カウンタを呼び出してカウントを増やすIMG要素を、

<img src="counter.cgi?mode=1" />

また、カウントを増やさずカウンタを呼び出すIMG要素を、

<img src="counter.cgi?mode=0" />

と仮定する。また、サイトのページがディレクトリ /~user/ 以下にあると仮定する。 このとき、たとえば以下のように記述する。

<!--#if expr="${HTTP_REFERER} = /http:\/\/${SERVER_NAME}\/~user\//" -->
      <img src="counter.cgi?mode=0" />
<!--#else -->
      <img src="counter.cgi?mode=1" />
<!--#endif -->

説明

SSIの要素if-else-endifは条件分岐を行うものです。判断のための条件式は expr="条件式"で与えられています。ここでは、

${HTTP_REFERER} = /http:\/\/${SERVER_NAME}\/~user\//

が条件式です。この式に現れる${HTTP_REFERER}には リファラ情報の文字列が、${SERVER_NAME}にはサーバーの名前 (たとえば user.ecc.u-tokyo.ac.jp)が入ります。この条件式全体で ジャンプ元のページのURLにサイトで共通の部分があれば真、なければ偽と いうことになります。
条件式が真の場合にはifとelseの間が出力されて、カウンタが回らないIMG 要素が出力されます。条件式が偽のときは、elseとendifの間が出力されて、 カウンタが回るIMG要素が出力されることになります。これにより、 期待していたような効果が得られます。

限界

もっとも、ブラウザがリファラ情報を出さないような場合には効力はありません。

[Top]>>>[Notes](index)

Copyright (C) 2002 Junro YOSHINO <s23044@mail.ecc.u-tokyo.ac.jp>