記事本文
Re: 小粋空間: .htaccess によるリダイレクト
MTタグを使って URL-path を自動的に生成していますが、残念ながらMTタグのみで「ドキュメントルートからのパス+ファイル名」というフォーマットを生成することはできません(いわゆるURL形式で生成されます)。
ユーザマニュアルに MTBlogRelativeURL というテンプレートタグが記載されています。
これを使えばドキュメントルートからの相対パスの記述を MT テンプレートタグだけで生成することが可能です。
<MTArchiveList archive_type="Individual">
<MTEntries>Redirect permanent <$MTBlogRelativeURL$><$MTArchiveDate format="%Y/%m/"$><$MTEntryBasename$>.html <$MTBlogURL$><$MTArchiveDate format="%Y/%m/"$><$MTEntryBasename$>.php</MTEntries>
</MTArchiveList>
<MTArchiveList archive_type="Category">
Redirect permanent <$MTBlogRelativeURL$><$MTSubCategoryPath$>/index.html <$MTBlogURL$><$MTSubCategoryPath$>/index.php
</MTArchiveList>
<MTArchiveList archive_type="Monthly">
Redirect permanent <$MTBlogRelativeURL$><$MTArchiveDate format="%Y/%m/"$>index.html <$MTBlogURL$><$MTArchiveDate format="%Y/%m/"$>index.php
</MTArchiveList>
これは Movable Type 3.2-ja-2 のデフォルト状態のアーカイブマッピングを例にしているため、小粋空間: .htaccess によるリダイレクトのソースと若干マッピングが異なりますが、基本的なソース形態はこのような形になります。
こう記述することで、
ファイルを生成した後、任意のエディタで開き、リダイレクトの設定で不要なドメイン部分を削除
するという手順は不要となります。
2 つのフルパス
これ以降、 Movable Type におけるフルパスの取り扱い方を解説しようと思いますが、一口に「フルパス」と言っても 2 種類あるため、まずはそれを説明します。
- CGI や PHP など、内部処理で扱うフルパス
-
正式名称は知りませんが、いわゆる「
/で始まるフルパス」というものです。 例えば xrea の場合、「 public_html の直下に put されている index.html のフルパス」ですと/virtual/userID/public_html/index.htmlというパスになります。 - http:// で始まるフルパス
-
実際にブラウザでリクエストする際に用いられるフルパスです。
内部処理で扱うフルパスと Movable Type のテンプレートタグ
内部処理で扱うフルパスを扱うために、 MTBlogSitePath というテンプレートタグが準備されています。
管理画面の「設定」→「公開」を開き、「サイト・パス」という欄を見るとそのテンプレートタグで表示されるパスを確認することができます。
( /home/melody/public_html/weblog
という例が書かれている部分です。 )
MTBlogSitePath で表示されるフルパスの他に、先ほど紹介した MTBlogRelativeURL で表示される相対パスがあります。
ユーザマニュアルには
ブログの設定画面に指定された Site URL からの相対アドレスです
と説明されています。
例えば、 Web Standards with MT ver.3.2 Strict で MTBlogRelativeURL を使ってみると、
/template/mt_3_2_strict/
という結果が返ってきます。
http:// で始まるフルパスと Movable Type のテンプレートタグ
こちらはお馴染みの (?) MTBlogURL を用います。 Web Standards with MT ver.3.2 Strict で MTBlogURL を使ってみると、 http://hxxk.jp/template/mt_3_2_strict/ という結果が返ってきます。
まとめおよび関連リソース
よって、小粋空間: .htaccess によるリダイレクトのように、 .htaccess をインデックステンプレートを用いて構築しようとする場合、リダイレクト元のパスを記述する場合は http:// で始まってしまう MTBlogURL ではなく MTBlogRelativeURL を用いるのが効率的ということになります。
なお、 .htaccess をインデックステンプレートで構築する手法については、 Redirect Template や entry_basename による URI からのリダイレクトを行う .htaccess の記述や Movable Type 2.x 形式の Permalink から Movable Type 3.x 形式の Permalink にリダイレクトする方法にて解説していますので、合わせてご覧ください。
MultiViews が使えるならば
.htaccess が使える環境ならば、合わせて Multiviews オプションを使える環境になっている可能性が高いと思います。
( もちろん利用しているサーバによって異なりますが。 )
よって、せっかくリダイレクトを行うなら、アーカイブマッピングを .html から .php に変更するのではなく、 .html から拡張子無しに変更することをお勧めします。
今後 .php という拡張子が変更になる可能性もゼロではありません ( 事実、以前は .php3 だった拡張子が .php に変更になった経緯があります ) し、何らかの理由で .html に戻すことも考えられるためです。
<MTArchiveList archive_type="Individual">
<MTEntries>Redirect permanent <$MTBlogRelativeURL$><$MTArchiveDate format="%Y/%m/"$><$MTEntryBasename$>.html <$MTBlogURL$><$MTArchiveDate format="%Y/%m/"$><$MTEntryBasename$></MTEntries>
</MTArchiveList>
<MTArchiveList archive_type="Category">
Redirect permanent <$MTBlogRelativeURL$><$MTSubCategoryPath$>/index.html <$MTBlogURL$><$MTSubCategoryPath$>/
</MTArchiveList>
<MTArchiveList archive_type="Monthly">
Redirect permanent <$MTBlogRelativeURL$><$MTArchiveDate format="%Y/%m/"$>index.html <$MTBlogURL$><$MTArchiveDate format="%Y/%m/"$>
</MTArchiveList>
なお、拡張子無しにするといっても、サーバ上での実体は .php ないし .html などの拡張子が付いたファイルですので、合わせてRemoveExtFromPermalink プラグインで
<$MTEntryPermalink$>
から拡張子を無くすと良いでしょう。
トラックバック送信先
- 小粋空間: .htaccess によるリダイレクト
-
ユーザマニュアルに MTBlogRelativeURL というテンプレートタグが記載されていますが、これを使えばドキュメントルートからの相対パスの記述を MT テンプレートタグだけで生成することが可能です。

