記事中のリンクをRewriteRuleで書き換える

  • 投稿日:
  • by
  • カテゴリ:

MovableType(MT)5.0にしたときだったか、blogテーマを今のやつに変えたんですよね。

そのときに記事アーカイブのパスが下図のようになりました。

file_link.jpg


MTは2.66の頃から使っていますが、昔は「entry_basename.html」がデフォルトだったような気がします。
いや、もしかしたら自分が勝手に変えてたのかもしれませんが、とにかく「entry_basename.html」で使っていました。 MTのメジャーバージョンアップやテーマの変更なんて滅多にないので、忘れてしまいました。

このパスというのは、記事のhtmlのファイル名称です。
例えば「東京電力、「夜得」と「夜トク」どっちがお得?」の記事は /archives/2016/01/post-7496.html です。 この「post」の後ろの「-」と「_」の違いですね。

MT5.0の時に「面倒なんでデフォルトでいこう」と考えて「entry-basename.html」にした訳です。
その結果、記事中に含まれる他の記事へのリンクが切れるようになりました。 当たり前といえば当たり前ですね。
実際には旧ファイル名のhtmlファイルは残ったまま、新しいファイル名のhtmlファイルが再構築されているので、旧ファイルの方に飛ぶ訳です。 こちらはCSSが切れてしまっていて大変見苦しいことになっています。

記事中のリンクを検索・置換すればいいんですが、これがなかなかに面倒です。
そこで mod_rewriteで書き換えることができないかやってみました。

/usr/local/etc/apache22/extra の httpd-ssl.conf に

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule ^(.*)/post_(.*)$ $1/post-$2 [R]
 </IfModule>

と書いてみたところ、ちゃんと新しいファイル名のhtmlファイルに飛んでくれるようになりました。 これでようやく古いファイルを消せるようになります。

ファイル名が「post」で始まらないタイプの記事(ファイル)もあるんですが、それは見つけたら個別に対応しようと思います。