MTでアーカイブマップング変更時、又はサイトリニューアル時のリダイレクト指定の裏技

| コメント(0) | トラックバック(0)

URLが変わらないのがもちろん一番なんですけどね。変わってしまうとき、URLのリダイレクト設定をしなければならないことがあります。

旅行ブログ、ノーマルブログの「ブログ記事」「ブログ記事一覧(カテゴリー)」のアーカイブマッピングを変更しました。

そのため、テーマを更新するとブログ記事ページとカテゴリーページのURLが変わります。旧URLから新URLへリダイレクトさせるテンプレートを用意しました。

プラグインを書いてダイナミックパブリッシングエラーテンプレートを利用する

.htaccessでリダイレクトする例が紹介されています。これはこれでいいのですが、.htaccessの場合、すべてのリクエストに対して処理が入るので、ちょっとでも負荷を減らしたいという時の裏技? として、ダイナミックパブリッシングエラーテンプレートを使う方法をご紹介します。

以下のファイルを用意します。

plugins/MyRedirect/php/function.mtmyredirect.php

ダイナミックパブリッシングエラーテンプレートの先頭に、以下のようにタグを記述します。

<mt:MyRedirect>

# <mt:MyRedirect>は存在しません、とか言われますが気にしなくていいです。
# スタティック用のタグがないだけで、ちゃんとこれで動作するので。

DynamicMTMLが有効なら、エラーページのURLを簡単に得る方法があるのですが、そうでなければ以下のようなテンプレートにして、エラーメッセージからパスを取得しても良いでしょう。

<mt:ErrorMessage setvar="error_message">
<mt:MyRedirect error="$error_message">

function.mtmyredirect.php の内容は以下のような感じです。

<?php
function smarty_function_mtmyredirect ( $args, &$ctx ) {
    // $app = $ctx->stash( 'bootstrapper' ); // DynamicMTMLが有効なら
    // $app->url;
    // $app->request;
    $error = $args[ 'error' ]; // DynamicMTML無効なとき、横着してパスを得る
    $url = preg_replace( "/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+).*$/", "$1", $error );
    // リダイレクト処理
    if ( $new_url ) { // パターンにマッチしたら
        header( 'Status: 301 Moved Permanently' );
        header( 'Location: ' . $new_url );
        exit();
    }
}
?>

データベースにアクセスしてリダイレクト対象かをチェックしてもいいですが、テンプレートで、CSVやJSONを吐いておいて、リダイレクトの対象かどうかを見るようなやり方がお勧めです。

.htaccessを用いる方法と比較すると、ページが見つからない時だけ処理されますので、全てのリクエストに処理が走る方法と比較すると負荷の面でお勧めです。但し、このPHPの処理自体が重い処理になってしまうと本末転倒ですので、必要に応じて使い分けてください。

また、リダイレクト先が存在しない場合、無限ループになったりしないよう、ページの存在チェックを入れることをお勧めします。

トラックバック(0)

トラックバックURL: http://junnama.alfasado.net/cgi/mt/mt-tb.cgi/828

コメントする

Facebook

Twitter

このブログ記事について

このページは、Junnama Nodaが2014年5月 7日 21:25に書いたブログ記事です。

ひとつ前のブログ記事は「Movable Type クラウド版ってどうなん?」です。

次のブログ記事は「横着なMTSetVar - SetFields2Varsプラグイン」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.2.6