- 2008年1月29日 19:10
- blog
移転メモ(2)アーカイブマッピングで、コンテントネゴシエーションを利用して(今後変更される可能性のある)拡張子を URI から排除する方法を書いたのですが、もう少し簡単な方法を見つけたので少し書いてみたいと思います。
拡張子の簡単な隠し方
実際にどうなるかというと、例えば nondelion.com の記事 URI を変更した場合は以下のようになります。
http://nondelion.com/archives/2008/01/29/1910
http://nondelion.com/archives/2008/01/29/1910/ ← 末尾に "/" が付く
URI の最後尾に "/" が付くだけ。どうやるのかというと、この例では今までの最下層にあった 1910.html(.htm, .php など)のファイル名をディレクトリ名に置き換えて、更にそのディレクトリ中に index.html(.htm, .php など)を作成し実際の内容を書き込むという誰でも思いつくような方法です。
http://nondelion.com/archives/2008/01/29/1910.html ← 変更前
http://nondelion.com/archives/2008/01/29/1910/index.html ← 変更後
更に記事のアーカイブマッピング設定は、以下のようにします。
%y/%m/%d/%h%n/index%x
で、「またテンプレートのタグを置換すんのかよ」なんて思われるかもしれませんが、そこは MovableType に任せてやるだけで自動的に<MTEntryPermalink>から index.* を消去してくれますので安心してください(MT便利すぎる!)。
実は、このサイトをオープンした直後にこれを思いついたんですが、後から URI を変更する訳にもいかないので「もう少し早く気付いていれば」と後悔していました。これから、拡張子を隠そうとしている人はこの方法でやってみるといいかもしれませんね。
おまけ
この機能の中核を担っているのが、MT::Util モジュールの strip_index という関数です。index + ブログで設定された拡張子名($index の中身)を $link から取り除いていることが分かります(7 ~ 9 行目)。
sub strip_index {
my ($link, $blog) = @_;
my $index = MT->instance->config('IndexBasename');
my $ext = $blog->file_extension || '';
$ext = '.' . $ext if $ext ne '';
$index .= $ext;
if ($link =~ /^(.*?)\/\Q$index\E(#.*)?$/) {
$link = $1 . '/' . ($2 || '');
}
$link;
}
- Newer: AS3 で Paint のバケツツールを作ってみた
- Older: 「51歳のヘルベチカ」ブックカバー展