mod_rewriteを使ってファイルのダウンロード数をカウントするスクリプトを作ってみた。特徴は、download/hoge.lzhのような普通のURLなのにカウントできるところ。mod_rewriteを使えば、例えばディレクトリ構成が以下の場合、
download/ count.cgi hoge.lzh
(http.confでmod_rewriteの設定をしていない場合は、他に.htaccessが必要)
download/hoge.lzhへのアクセスがあった場合、download/count.cgi?hoge.lzhを実行することができる。つまり、URLは実際にあるファイルを示しているけれど、サーバーがそのファイルを返す間にCGIによる処理を挿入できるということ。
一般的なカウンターの場合、ファイルごとにIDを設定したりする必要があって、ファイルが増えてくるとその管理に結構手間がかかる。でもこの方法だとそういった設定は一切不要。また、URLにいかにもCGIで処理しています、というような?の文字が入らない。
この方法は他にも、リンク切れがないかローカルでチェックすることができるというメリットもある。また、何の設定もなしにサブディレクトリ以下にあるファイルにも対応でき、download/category/hoge.lzhというような使い方もできる。さらに、特定の拡張子にだけ反応するように設定して、ルートディレクトリにcount.cgiを置いておけば、それだけでサイト全体の特定の拡張子のすべてのファイルのダウンロード数をカウントできる。ファイルを追加する場合、何の追加設定も、ダウンロード専用のディレクトリに置く必要もない。
mod_rewriteは他にも便利な活用方法がありそうだなぁ。
先日書いたReferrer消去リダイレクトだけど、mod_rewriteを導入してURLから?をなくしてみた。下のリンクをクリックすると実験できます。
リンク元:なお、http://uttsu.com/r/は、利用可能なリンク元を限定しています。
上の実験で気付いたけど、リダイレクトの種類によっては(すべて?)URLの#以降が消去されてしまうみたい。これはサーバーかクライアントかどちら側が原因なのかな。以前にも同じようなことをどこかで読んだ覚えがあるので、やっぱりサーバー側かな。
それから、Netscape4.xでは「ドキュメントにデータが含まれていません」と表示された。必要なヘッダを出力し忘れているのかな? でも、一応リダイレクトはできた。