« Movable Type 3.121, 3.12 リリース版の未修正バグ | メイン | ファイル mt-*.cgiのみ GET (POST) によるアクセスを許可する方法 »

2004年11月17日

dirify and Permalink (Movable Type)

Permalink 先のURLとして使用されることが多い個別アーカイブ・ファイル名は、Movable Type のデフォルト設定では、
オリジナルドメイン名 (ないし, WWWサーバのホスト名やユーザ名) + エントリーのタイトル名の自動変換(dirify).拡張子
です。
Movable Type 設定についての日本語ドキュメント(英語版の逐語訳)では、
http://www.movabletype.jp/manual/mtmanual_weblog_config.html#archiving
「デフォルトで個々のアーカイブ・ファイルには、エントリーのタイトルに応じて名前が付けられます。たとえば、'Our Magnificent Day at the Beach(ビーチでの素晴らしい日)'というタイトルのエントリーには'our_magnificent.html'などのファイル名が付けられ、エントリーの作成月に基づき'2004/05/our_magnificent.html'というディレクトリに保存されます。・・・」と記述されています。しかし、日本語のタイトルでは、偽りの説明です。
しかも、PublishCharset (エンコード) の選択: 「UTF-8」 「EUC-JP」 「Shift_JIS」 によって、異なる名前となります。

Ogawa::Memorandaさんの タイトル: dirifyについて考えてみた。
http://as-is.net/blog/archives/000926.html
をご覧になると名づけ方の詳細がわかります。

"ダイナミック (PHP) ページのための設定について" というタイトルで新規エントリを作成すると、

Δ PublishCharset (日本語エンコード):「EUC-JP」
http://hitomi.s47.xrea.com/shellscript.biz/archives/2004/09/aessaphpuiaiass.html
     URL名としては無意味な文字の羅列(phpを含む) となることがあります(注1)。 なお、「Shift_JIS」においても無意味な変換が行われます。

Δ PublishCharset (日本語エンコード):「UTF-8」
⇒ http://www.example.com/archives/2004/11/_php.php
     日本語はすべて_ (アンダースコア)に変換されて、英語 php のみ表示されます (すべて日本語タイトルのとき: (注2) (注3) をご覧下さい)。

Δ 個別エントリーアーカイブのテンプレートをファイル名 <$MTEntryTitle dirify="1"$>_<$MTEntryDate format="%m%d%y"$>.php で保存したとき (日本語エンコード: UTF-8):
⇒http://www.example.com/archives/archives/_php__111704.php
   英語であれば行頭から(半角文字数)15以内の文字制限なし_日付.拡張子 となります(注3)。但し、正しく設定しないと、ダイナミック・ページではURLに反映しません。

Δ アーカイブの設定 (□ 以前の形式の個別アーカイブへのリンクをつかう) をチェックしたとき:
http://hitomi.s47.xrea.com/shellscript.biz/archives/000024.html
     個別のアーカイブへのリンクに以前の形式(id)を利用しますか? にチエックを入れ保存すると、連番表示のURLとなり、日本語エンコードには依存しません。

Δ(注1): PublishCharset: EUC-JP における問題点 (タイトルから無意味な URLが生成されてしまう) は、mt.cfg に「DefaultLanguage ja」を設定することで解決するそうです。詳しくは、
    http://as-is.net/blog/archives/000895.html
    http://as-is.net/blog/archives/000910.html
のページをご覧下さい。
make_unique_basename と dirify の利点、欠点が詳しく解説されています。
引用(1)
「一つのエントリに一つのファイル名を対応させる」ために個々のエントリにuniqueな文字列が設定されます(MT::Util::make_unique_basename)。
引用(2)
ただし、make_unique_basenameはそのエントリが作成された時点で呼び出されるので後で日時を変更してもbasenameには反映されません。このbasenameというのはほとほと「使えない奴」なわけです。
Ogawaさんに、再々感謝です。
Δ(注2): タイトルがすべて日本語のとき
⇒ post.html, post_1.html などに変換されます。
Δ(注3): タイトルに英語が含まれているとき
⇒ 同じタイトル名では、エントリが異なっていても、同一のファイル名 (URL)となることがあります。

Δ マルチバイト対策のMT用 plugin "dirifyplus" を使用しても、本質的な解決とはなりません。
http://mt-plugins.org/archives/entry/dirifyplus.php
    アンダースコアを除去したり、(半角)空白をトルツメしたり、ハイフンに変換したり・・・の機能だけのようです。
たとえば、個別エントリーアーカイブのテンプレートのファイル名を指定すると、
(例) URL: http://www.example.com/archives/how-to-upgrade-movable-type-and-mt-manual-weblog-config.html
と表示できます。

投稿者 mvtp : 2004年11月17日 17:30

トラックバック

このエントリーのトラックバックURL:
trackbacklink 37

コメント

> Δ PublishCharset (日本語エンコード):「EUC-JP」
> ⇒ http://hitomi.s47.xrea.com/shellscript.biz/archives/2004/09/aessaphpuiaiass.html
> URL名としては無意味な文字の羅列となります(phpを含む)。「Shift_JIS」においても無意味な変換が行われます。

「DefaultLanguage ja」が設定されていないのではないかと思います。

投稿者 (o) : 2004年11月17日 17:56

mt.cfgの設定は
DefaultLanguage ja
TypeKeyVersion 1.1
・・・
・・・
となっていました。過去形である理由は、DB+PublishCharsetを先日、PostgreSQL+EUC-JP から MySQL+UTF-8 に変更しました。Xrea.comさんのサーバでは、PostgreSQLの初期化を行うと、EUC-JPに自動設定されて変更できないため、やむを得ない選択でした。

投稿者 tips : 2004年11月17日 18:17

謎はすべて解けました。2004/09ですからそのエントリを作ったのはMT 3.11日本語版ではありませんね。
basenameはエントリを作ったときに決まりますから、そのときに「DefaultLanguage ja」ではなかったということです。

投稿者 (o) : 2004年11月17日 18:30

いろいろご指導ありがとうございました。mt.cfgを編集し、「DefaultLanguage ja」を追加した時期は、MT 3.11日本語正式版公開前でしたが、いつ追加したか?定かではありません。しかし、問題解決できましたので、また、ご指摘いただきましたことは、旧バージョン利用者にとって重要なことですので、(注1)としてエントリに追加しました。ありがとうございました。

投稿者 tips : 2004年11月17日 19:59

コメントしてください

サイン・インを確認しました、 . さん。コメントしてください。 (サイン・アウト)

(いままで、ここでコメントしたとがないときは、コメントを表示する前にこのウェブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


情報を登録する?




 Modified by Toshiaki YAMAMURA    Powered by Movable Type
 ■シックス・アパート株式会社より「個人用ライセンス」を取得し、Movable Type にて情報提供中です. ■ハンドル名とメールアドレスを入力すると、自由にコメント投稿できます. 但し、15歳未満のお子供は必ず保護者の指導・監督下で行って下さい. ■本ウエブログでは、サイト管理・運営者が著しく不利益と判断するコメントや他人を誹謗中傷するコメントは、直ちに削除いたします.