MTでURLを相対パスで指定するときの注意点

以前書いた「MTSetVarTemplateを使い倒す」という記事で、「MTEntryPermalinkタグの相対パスバージョンを作る」というのを紹介した。

これと同じ方法で様々なURLを相対パスにすることができ、今現在、このサイト内のリンクのほとんどが相対パスになっているんだけど、システムテンプレートで問題が発生したので、忘れる前に原因とその対処法を記事にしておく。

まず原因は、システムテンプレートを使用したページ(コメントプレビュー・コメントレスポンス・サーチリザルトなど)が動的に生成されるという点。

例えば、サイトタイトルの部分に相対パスでトップページへのリンクを指定したとする。

<a href="/">サイトタイトル</a>

ウェブページやブログ記事などの再構築によって生成されるページは、問題なく上記のリンクを使用できる。が、システムテンプレートを使用したページはmt-comments.cgiやmt-search.cgiなどのプログラムを介して表示される。

実際にサイトが構築されるディレクトリとは別のディレクトリにこれらのプログラムが置いてあると、トップページ以外の場所をリンクに指定していることになってしまう。

具体的な例を挙げると、トップページが http://website.domain/index.html だった場合、リンクに / が指定してあると、 http://website.domain/ を指定したことになるけど、 mt-comments.cgi のURLが http://website.domain/mt/mt-comments.cgi だった場合は、 http://website.domain/mt/ を指定したことになってしまうという訳。

で、これの最も簡単な対処法は、システムテンプレートのhead要素内にbase要素を追加してあげるだけ。

<base href="<MTBlogURL>" />

base要素は相対パスの基点となるURLを指定するための要素で、結構古くから存在する要素なんだけど、知らない人も多いんじゃないかな?

このサイトのシステムテンプレートにも記述してあるから、コメントの投稿がてらソースを覗いてみてね!