Movable Type のアーカイブマッピングには MT タグが使える

シェアする

ブログの URI を変更したい

256 east 135th street (by (michelle)) (by (michelle))

ある日とつぜん、ブログの URI を変更したくなった。──よくある欲求である。

たとえば、こんな風に変更したい:

  • 旧 URI: http://example.com/mt/archives/2009/01/23/04-56.php
  • 新 URI: http://example.com/mt/2009-01/23-0456.php

べつに今のままでも支障がないし、訪問者にとっては どうでもいい。それに、「あのページ」のタイトルが、重く心にのしかかる……。

クールなURIは変わらない — Style Guide for Online Hypertext

それでもやっぱり、URL を変更したい!

考え方は、3 通りほどある:

  1. 地ビール独歩 飲み比べ12本セットでも飲んで、あきらめて寝る
  2. すべてのページの URI を変更して、旧 URI から新 URI へリダイレクト
  3. いままでのページの URI はそのままで、ある時点から URI を変更する

1 番目を一番お勧めしたいが、飲み過ぎには注意が必要だ(不注意による買いすぎは気にしなくて良い)。

2 番目の方法が一般的だろう。リダイレクトを正しく行なえば、リンク切れは防げる。しかし、「SEO 的にどうのこうの」とか「オンラインブックマークの数がリセットされる」などの問題があるのだ。人によっては、一番の悩みの種だろう。

今回の記事では、3 番目の方法について書く。

Movable Type 4.x を使っている場合は、わりと簡単に「条件指定付きパーマリンク」が設定できる。タイトルでネタバレだが……。

条件に応じてパーマリンクを変更

アーカイブテンプレートの出力を、MT では「アーカイブマッピング」と呼ぶ。独自の造語の是非については また書くとして、下記のドキュメントに情報がまとまっている。

しかし、今回の記事の情報──アーカイブマッピングに MT のタグが使えることは、書かれていない。

そういえば、MT 3 の時代には、ここに MT タグを書いていたのだ。id:kanose さんの記事で思い出した。

ARTIFACT ―人工事実― : MovableTypeのページ分割/Permalinkの変更

MT 4 のころから、パーマリンクの指定に簡単な書式(%y/%m/%d/%h%n/index.php など)を使えるので、忘れていたのだ。

具体的な記述例

いつものように回りくどい前書きがようやく終わった。下に具体的なコードを示す:

<MTSetVarBlock name="entry_date"><MTEntryCreatedDate format="%Y%m%d"$></MTSetVarBlock><MTIf name="entry_date" lt="20090301">archives/%y-%m/%d_%h%n.php<MTElse>%y-%m/%d-%h%n/</MTElse></MTIf>

このコードをエントリィのアーカイブマッピングに設定することにより、

「2009 年 3 月 1 日以前の記事は archives/%y-%m/%d_%h%n.php というリンク、それ以降は %y-%m/%d-%h%n/ というリンクにする」

となるのだ! ほかのアーカイブにも、応用できる。

ちなみに、ここに %y-%m/%d-%h%n/ と書いても、実際のパーマリンクは http://example.com/mt/2009-03/21-1200 といった、スラッシュなしのアドレスになる。

ところで、MT タグを使うとアーカイブマッピングが横長になる。普段は隠れている(クリックすると出てくる)ので、気にしないこと。

MT のパーマリンクは条件式が使える (by asiamoth) (by asiamoth)

ブログのトップページを無視する

今回の目玉情報である。

トップページの URI が http://example.com/mt/ だとする。アーカイブマッピングに ../blog/%y-%m/%d-%h%n/ と指定すると、なんと、http://example.com/blog/2009-03/22-1200/ がパーマリンクにできるのだ!

しかも、ちゃんと blog ディレクトリも作ってくれる。これはスゴい!

この指定の場合はなぜか末尾にスラッシュが付くことに注意しよう(単純にスラッシュを書かなければいいのだが、前に不具合があった気がする)。そのあたりの仕様を受け入れられるのなら、ちょっと面白い。

余談

ところで、自分には「URL」という呼び方の座りが良くて、「URI」は落ち着かない。なぜなら、URI は URL の上位にあって、「インターネットのアドレス」以外も多く含むからだ。

初めて知り合った人──仮に 18 歳・巨乳・ロリ顔・アニメ声と設定する──から「アドレス教えて(はあと)」と携帯電話を片手にして言われたときに、

「君が言う『アドレス』の定義は何? 現住所? 本籍のほう? ボクのコンピュータがつないでいる IP アドレスかな? ブログサイト・mixi・Wassr・tumblr の URI? それとも──」

と言い返すような、面倒くささを感じるのだ。

──そう思っていたら、こんな記述を見つけた。

URLやURNはURIのサブセットであるが、W3CによればURL、URNとも古典的な概念でありどちらも現在は非公式の概念で、唯一URIのみが公式の概念であるという。

URIとは – はてなキーワード

ということで、この記事からは URI と言うことにした。W3C 様には、逆らえない……(この情報の裏を取る、とかもしない)。