Visitorsで出力されたページをmod_substituteで調整する

こちらの記事でも書きましたが、当方のサイトのログを Visitors というソフトで解析しています。
Visitorsのリアルタイム統計を過去ログも含めて出力する | 曖昧/旬
処理は軽いし、結果は1ページでシンプルだし、かなり気に入っています。でも解析結果のページURLがリンクになっていなかったり、HTMLに title が設定されていなかったりと、ちょっと残念なところがあるんですよね。

というわけで表示を調整するのに使ったのがこれ。mod_substitute という Apache のモジュールです。出力するコンテンツに正規表現変換をかけてくれます。
mod_substitute – Apache HTTP Server Version 2.2
なぜ Apache モジュールにしたかというと、Visitors はリアルタイムモードのためパイプでコマンドを挟み込むことはできないし、定時実行で毎分起動するコマンドを設定するのは嫌だからです。そうなるとHTMLファイルを出力するときに調整するしかない。というわけで Apache モジュールなのです。

さて、まずは mod_substitute を有効化します。このモジュールは知名度はあまりないけれど、公式ソースに含まれるちゃんとしたものです。実験的モジュールでもありません。一般的なディストリビューションなら Apache をインストールするだけで付いてくると思います。CentOS 6 でも然り。

$ rpm -q -f /usr/lib64/httpd/modules/mod_substitute.so
httpd-2.2.15-39.el6.centos.x86_64

有効化するには Apache 設定ファイルで mod_substitute を読み込むように修正して再起動します。既に有効ならは必要ありません。CentOS 6 では httpd.conf にこんな感じの設定がコメントアウトされているので、それを有効化すればいいです。

LoadModule substitute_module modules/mod_substitute.so

これで準備完了です。後は mod_substitute の設定を入れれば出力コンテンツが変換されてくれます。ここからは Apache 設定ファイルでも .htaccess でもいいんだけど、分かるところに書きます。アクセス頻度と修正頻度のバランスになるけど、こういうページは .htaccess でいいと思います。

と、その前にもう一つ。SUBSTITUTE フィルタを有効化します。拡張子 html のファイルでフィルタを有効化するならこんな感じ。

AddOutputFilter SUBSTITUTE html

そしてついに変換設定。とりあえずタイトルを入れたい。

Substitute "s|<head>|<head><title>Visitors to imys.la</title>|"

うん、入った。

次に記載されているURLをリンクにしていく。サイト内のリンクはデフォルトで / から記載されているだけなので、そこを a タグに書き換えます。

Substitute "s|>(/[^<]*)<|><a href='http://imys.la$1'>$1</a><|"

公式のマニュアルには記載されていませんが $n で後方参照ができるようです。2.4 のマニュアルには書いてあった。

Backreferences can be used in the comparison and in the substitution

引用元: mod_substitute – Apache HTTP Server Version 2.4

すると、こんな感じで出来上がります。
Visitors to imys.la
うん、いいんじゃないかな。