MultiViewsの憂鬱
アクセスログを眺めていると変なヤツがおります。 クローラだか、スパイダーだか、面倒なのでクローラと書きますが、そういう類いの中には、絶対パスを相対パスと解釈する「おバカさん」が数匹。
例えば「/bbs/bbs.cgi」へ記述された「/bbs/bbs.cgi」をたどる場合、「/bbs/bbs.cgi」をリクエストするのが正解。 取得済みURLなので本当は「なにもしない」が正解ですが。 さておき、上記のクローラは絶対パスを相対パスと解釈するので「/bbs/bbs/bbs.cgi」をリクエスト。 以降 ────
- /bbs/bbs.cgi
- /bbs/bbs/bbs.cgi
- /bbs/bbs/bbs/bbs.cgi
- /bbs/bbs/~省略~/bbs.cgi
最初以外は存在しないから無視すればいいさ。 まして3番目以降のリクエストはあり得ない。 ところが、そうは問屋が卸さない。 どういうわけか、上記のステータスはすべてHTTP200!? おかげさまで、クローラは再帰的に無限個数のページをたどるべく3時間で4万PVという軽い営業妨害。 なんだよこれ・・・
.htaccessの不具合を疑い最終的にファイルの抹消まで試みましたが事態は解決せず。 うん、なるほど。 とりあえず、自分は悪くない。 というわけで、サーバの仕様を調べたところ・・・
MultiViewsが有効になってる(;´Д`)
「MultiViews」というのは、要するに、拡張子を省略しても、上手いことゴニョゴニョしてくれる、ありがた迷惑な機能。 迷惑度はPHPの「Magic Quotes」に次ぐとか次がないとか・・・
MultiViewsの作用で「/bbs/bbs/bbs.cgi」は「/bbs/bbs.cgi/bbs.cgi」と勝手に解釈。 「/bbs.cgi」をパラメータとする「/bbs/bbs.cgi」のリクエストとして有効。 以下省略。
面倒くせぇ(ノД`)
MultiViewsを無効にすれば済む話ですが、サーバの制限でOptionsはいじれない。 仕方がないので上記のようなリクエストは是が非でもHTTP403。 超乱暴。 ところが、治まらないんだ、これが。 よくよく考えたら、エラーページも正常なページも根本的な中身はたいして変わらないじゃん・・・
「おバカさん」にステータスの解釈を求めた私が「おバカさん」でした(T^T)
作戦変更。 上記のようなリクエストは是が非でも中身が「空」のHTTP404。 中身が「空」では手も足も出まい。 かくして、一件落着したわけですが・・・
面倒くせぇ(ノД`)