リンクされていないリファラーに対応する
μ memoさんのエントリーを読んで、自分も同じ事をしているのを思い出して覚え書きエントリー。 っていうかこんなの私のサーバーだけなのかと思ってた...。
私もアクセス解析にはAWSTATSを使っております。 今やリファラーは殆どチェックしないのでありまして、するのであればお手軽にTrackfeedを使うのですけれど、それからも漏れてしまうケースがあるので、そういう場合に限りAWSTATSでチェックしております。
で、私の環境ではμ memoさんと異なり、そういったスパムはそんなにアクセスがありませんので、アクセスは許可し、単にログへ書き込まないようにしております。 何故ならこのタイプのスパムってアクセス解析の結果を見なければアクセスのしようがないから...。
で、当サーバーでは既に幾つかのアクセスパターン(ワーム等)をログに書き込まないように設定しておりますので、それに沿ってhttp.confに追記しております。
SetEnvIf Referer ".*casino.*|.*gambling.*|.*holdem.*|.*poker.*|.*viagra.*" nolog
SetEnvIf Referer ".*discount-store.*|.*3marketeersproductions.*|.*randppro-cuts.*|.*cash-net.*|.*excellent-health.*|.*littledevildoubt.*" nolog
<VirtualHost ***.***.***.***>
~~~snip~~~
CustomLog "| hoge/rotatelogs.exe hoge/%Y%m.log 86400 540" combined env=!nolog
~~~snip~~~
</VirtualHost>
この時に知ったのですが、テキサス・ホールデムっていうのはカードゲームの何からしいんですね。 何で「holdem(hold 'em)」なんだろうって前から思ってました。 コメントスパムもこの文字フレーズが含まれている場合が多いですしねぇ。 でもあれだな。 誰かが「Texas Holdemって云々」ってエントリーを書いて(吐かれるファイルがtexas_holdem.htmlとかで)padma colorsにリンクした...なんてケースの場合、ウチのログには残らないんだろうなぁ(笑)
ところで私の場合はAWSTATSにアクセスせず、AWSTATSのログ(Apacheのログではなく)をコピーしてそこから弾くべき文字フレーズを抜き取っているのですが、これがまた大変なんだよねぇ。 私の場合はJeditを使っているのですが(近々CotEditorに乗り換え予定...って前も書いたけどなかなか踏み切れない)、
1、ログをJeditで開く
2、cmd + Fで検索ウインドウを出す
3、検索オプションの「正規表現」にチェックを入れる
4、検索欄に「^http://((www\.)*padmacolors\.).*\n」とし、置換欄を空白にして「すべてを置換」
5、「BEGIN_PAGEREFS」の下の行から「END_PAGEREFS」の上の行まで抜き出す
多分毎回こんな事をしているんだと思います。 というのも覚え書きを残しておかないので、毎回違う方法かも知れないから...。
ともあれ、ログは結構な量なんで、必要な部分だけ抜き出してチェックしないと大変。 4の正規表現の部分は...私正規表現が苦手なので解説という程でもないんだけど
^http://((www\.)*padmacolors\.).*\n
^ :文頭に
http:// : という文字列があって
(
(www\.)* : www.っていうが文字列があるか、或いは無いか
padmacolors\. :そしてpadmacolors.っていう文字列があって
)
.* : その後にあれこれ文字があって
\n : 改行されている
みたいな。 当サイトの場合、www.padmacolors.orgでもwww.無しのpadmacolors.orgでもアクセスできますし、orgまで対象にしないのは、トップレベルドメイン「net」も持っているから、詰まりpadmacolor.netからのリファラーも考えられる、と。 だのでhttp://~~padmacolors.っていう文字列があれば(そのリファラーはチェックする必要が無いから)ヒットしたら空白で置き換えますよ、という具合です。 んでこの正規表現、次回はもっと簡潔になっちゃったりするんだろうなぁ(笑)
ところで、
http://www.padmacolors.org/archives/2004/02/08_092450.php 1 1
みたいに最後に数字が2つあるのは、これはリファラー数みたいですね。 これすら削除したいのであれば「\ \d*」で空白置換すればいいんじゃないかな(バックスラッシュの間に半角スペースが一つあります)? っていうかそこまでする必要は無いよなぁ。
んでもって「BEGIN_PAGEREFS」の下の行から「END_PAGEREFS」の上の行まで抜き出せば良いと。 そうじゃないと無駄に長く抜き出さなくちゃならないですよね?っていう話です。





