Home > blog > 移転メモ(2)アーカイブマッピング

移転メモ(2)アーカイブマッピング

  • Posted by: non
  • 2008年1月 5日 07:41
  • blog

移転メモの2回目は、移転時に設定した MovableType 4.01 でのアーカイブマッピングについて書きたいと思います。

アーカイブマッピングの設定を変更した理由

なぜアーカイブマッピングを設定したのかというと、デフォルトのまま放置した場合、記事タイトルを日本語にすると出力ファイル名が post_11.html のようになってしまうからです(MTタグでは<MTEntryBasename>の出力)。その都度英語でファイル名を決めてやればいいわけですが、例えばこの記事名を英語にすると、

memo of site relocation (2) archive mapping

となり(これでいいかな?)、出力ファイル名を、

memo-of-site-relocation-2-archive-mapping.html

とすればバッティングしない(はず)。更にデフォルトでは、サイトURI + 年(4桁) + 月(2桁)がおまけで付いてくるので、最終的な URI は以下のような長ったらしいものになってしまいます。この形式にしたときの恩恵は、記事タイトルを URI にすることである程度記事の内容を把握してもらえること。それだけ。しかも、記事タイトルを編集したくなったとしても簡単には変更できなくなってしまうので、あまり良い URI 設計とは言えません。

http://nondelion.com/2008/01/memo-of-site-relocation-2-archive-mapping.html

クールな URI 設計

そんな事を考えていて、行き着いたのが以下の wu さんの記事と、それ経由で知った神崎先生の記事。

これらの記事によれば、「変更される可能性のある全ての名前を排除して URI 設計を行うべし」ということらしいのです。もう、記事を読んでいくうちに感動してしまって、独自ドメインを取得して新しくサイトを始めるときは、これを実行しようと決心していました。

それで、これらを踏まえた上で nondelion.com にある記事の URI 設計は、archives/年/月/日/時分、としました。これで毎回出力ファイル名を決める手間も省ける上に、一定の長さになるのでクールでキレイな URI を保てるという、まさに一石二鳥の解決方法に辿り着くことができました。本当に感謝しています。

http://nondelion.com/archives/                   ←    ヘッドライン
http://nondelion.com/archives/2008/01/05/0741    ←    記事

また、旧ブログではヘッドラインが記事とは独立したディレクトリにあったのですが、今回 archives のインデックスにすることで全記事のインデックスとしての役目も果たせ、階層的にも URI 的にもおかしくない構造にすることができました。

実際の設定方法

nondelion.com の場合、archives ディレクトリ下に記事のアーカイブを構築するため、まずアーカイブパスの設定を行います。 MT4 のダッシュボードから[設定] - [ブログの設定] - [公開]へ行き、「アーカイブをサイトパスとは別のパスで公開する」にチェックを入れ、アーカイブ URL とアーカイブパス(フルパス)を入力することで設定できます。こうすることで記事は archives 下に構築され、また、<$MTBlogArchiveURL$>から http://nondelion.com/archives/ を参照できるようになります。

※黒塗り部分はサイトまたはブログのフルパスです。

MovableTypeのアーカイブPath設定

次に、記事のアーカイブマッピングを設定します。具体的には、MT4 のドキュメントにアーカイブマッピングについて書かれているので、それを参考にして設定を行います。

今回設定する形式は当然デフォルトには無いので、「カスタム」を選択し、%y/%m/%d/%h%n%x に変更します。

ブログ記事のアーカイブマッピング設定

この時点では、%x を付けているため .html (または.php)という拡張子で記事が保存されるようになっていますが、これは拡張子によってブラウザがメディアタイプを判別できるようにするためです。無拡張子の設定は、後でコンテントネゴシエーションによって実現させます。

次にテンプレート内の記事へのリンクを変更します。基本的には、<MTEntryPermalink><MTEntryLink> を以下の形式に変更するだけなのですが、置き換え場所によって2パターンに分かれます。

<MTArchiveList> 内か、日付アーカイブにある <MTEntrys> の外側であれば <MTArchiveDate> を、

<$MTBlogArchiveURL$><MTArchiveDate format="%Y/%m/%d/%H%M">

それ以外なら <MTEntryDate> を使います。

<$MTBlogArchiveURL$><MTEntryDate format="%Y/%m/%d/%H%M">

mt.Vicuna2.0の場合は、<MTEntrys> を多用しているので、基本的に <MTEntryDate> の方を使います。設定当初は <MTArchiveDate> を使っていたんですが、トラックバックテンプレートだけ使えなかったので <MTEntryDate> を使うことにしました。ここらへんはドキュメントがあてにならないので、自分で Try & Error するしかないですね。

※2008-01-06T07:38:00+09:00 追記

以下のサイトを見て、ping や コメントのサインイン / サインアウト時にも permalink に拡張子が付いてしまう事を知りました。そこで、drry+@-> さんが配布されていたプラグインを MT4 のサインイン / サインアウト時にも対応できるよう拡張して使っています。

コメントに、

クレジット等を残して頂ければ、改変や再配布は自由です。

MultiViews のための拡張子戦争が終結

と書いてあったので、機会があれば再配布でもしてみようかなと思っています。

最後にコンテントネゴシエーションの設定をします。これは、.htaccess が使えるサーバーでしか設定できないのですが、できそうな場合のみ試してください。以下の内容を .htaccess に書き足すことで設定完了です。

Options +MultiViews

タグと検索

ついでに mt-search.cgi を使ったタグやキーワードの検索も、kaminogoya さんの記事を参考にクールな URI にしてみました。

これは Apache の mod_rewite を利用することで、URI を置き換える方法です。nondelion.com の MT は cms ディレクトリ下にあるため、mt-search.cgi で検索した場合は以下のようになります。

http://nondelion.com/cms/mt-search.cgi?IncludeBlogs=1&search=キーワード
http://nondelion.com/cms/mt-search.cgi?tag=タグ名&blog_id=1

これを正規表現を使って置き換えてやるためには、.htaccess を以下のような内容にします。

RewriteEngine on
RewriteRule ^search/(.*)$ /cms/mt-search.cgi?IncludeBlogs=1&search=$1
RewriteRule ^tag/(.*)$ /cms/mt-search.cgi?tag=$1&blog_id=1

これを先程のコンテントネゴシエーションを書いた .htaccess に追記すれば完了です。更に、テンプレートのタグリンク部分を以下のように変更することでURIが全てクールになります。

<$MTBlogURL$>tag/<$MTTagName$>

検索部分の置き換えについては form が絡んでくるため考え中です。良い案が見つかったらまた書こうと思います。

WordPress のアーカイブマッピング(おまけ)

MT と違って WP では URI 設計が簡単にできるような機能がついています。ダッシュボードの[各種設定] - [パーマリンクの設定]から、「独自表記を以下の入力欄に記述」を選択しカスタム構造を、

/%year%/%monthnum%/%day%/%hour%%minute%%second%

のようにし、出力される内容を .htaccess に書き込むだけで設定できます。ただし、詳しいことは調べていないのですが、 秒の部分を外すと日付アーカイブへ飛ぶようになってしまい、記事を見れなくなってしまいます。これが WP の仕様なのかバグなのかは分かりません。ただ、MT よりは確実にアーカイブマッピングを設定しやすいので、「分からないけどやってみたい!」という方は WP を利用してみるのもいいかもしれませんね。

まとめ

移転時に試したアーカイブマッピングの設定について書きました。クールな URI 設計の考え方は Web に関わる人には是非知っておいて欲しい知識だと思います。この考えを知らない人にはできるだけ伝えたいと思っています(済: toshipon)。検索についてはまだ完成していませんが、できれば早めに変更できるようにしたいと思っています。

次回の移転メモ(3)は FeedBurner あたりを書く予定です。

heteml banner

Comments:0

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Trackbacks:0

TrackBack URL for this entry
http://nondelion.com/cms/mt-tb.cgi/90
Listed below are links to weblogs that reference
移転メモ(2)アーカイブマッピング from nondelion.com

Home > blog > 移転メモ(2)アーカイブマッピング

Search
Feeds

Return to page top