MT4のcaptchaがうまくいかない

MT4の新機能、captcha。
captchaというのは、文字列が書かれた画像を正しく入力できているかという認証方法のこと。人が見て入力しないと駄目で、機械では読み取れなくなっています。機械が送ってくるスパムの防止に効果が高い認証方法です。

それで、MT4では、プラグイン入れなくても、それがデフォルトで入っています。便利で素敵なことだとおもってたんですが、なんか表示されない。んで、検索してみたら、fakelife -kalze’s blog- MovableType4のcaptchaでハマったが見つかりまして、参考にさせていただきました。


MT4のcaptchaがうまくいかない時の手順としては、

  1. Image::Magickが正しくインストールされているか確認。mt-check.cgiでチェックするのがいいですね。
  2. ブログの設定のコメント設定でCAPTCHAプロバイダを確認。プルダウンが表示されていたら成功。MovableType規定を選択。
  3. エラーが表示されていたら、mt-config.cgiに
    CaptchaSourceImageBase 絶対パス

    を追加。

これで、表示される。ということだったんですが、表示されない。画像がデットリンクになってしいます。
死んでる画像のプロパティを見てみましたら、http://blogname/mtmt-comments.cgi/captcha/——–と出ます。…mt-commentsの前にスラッシュがありません。
ちなみに、mt-commentsの前にスラッシュを入れてURL直打ちすると、きちんとcaptchaは表示されました。
ということは、mt-config.cgiに記述した絶対パスは合ってます。
モジュールテンプレートのコメント入力フォームでcaptchaを表示させてる記述がおかしい、とアタリをつけてテンプレートを見ても、テンプレート自体にcaptchaを呼び出してる気配がありません。
というわけで、、fakelife -kalze’s blog- Captcha 部分のバグ修正とデザイン変更を参考に、「lib/MT/Util/Captcha.pm」の59行目に手を加えました。

<img src="$cgipath$commentscript/captcha/$blog_id/$token" mce_src="$cgipath$commentscript/captcha/$blog_id/$token" width="150" height="35" />

ここの$cgipath$の後ろにスラッシュ追加。

<img src="$cgipath/$commentscript/captcha/$blog_id/$token" mce_src="$cgipath/$commentscript/captcha/$blog_id/$token" width="150" height="35" />

これで無事表示されるようになりました。
壊す危険性が潜んでいるので、システムファイルいじるときはバックアップをとりましょう。