MT 新形式アーカイブへのリダイレクタ

| 0 Comments | 0 TrackBacks

以前 "古いタイプのアーカイブを作る方法" で書いたとおり、Movable Type 3.2 系での個別記事の URL が /yyyy/mm/basename.html へ変わりました。

旧形式から新形式へのリダイレクタがないことから、旧 URL を維持できないので移行しませんでしたが、今回リダイレクタを書くことにより新形式への移行を行いました。

なお、この移行により、私のアイディアマラソンは、http://idea.woremacx.com/へと移動しました。

.htaccess

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ http://blog.woremacx.com/redir.cgi/$1 [L,R=301]

redir.cgi

#!/usr/bin/perl

use strict;
use DBI;
use CGI;

# if we get illegal param, just return $def
my $def = "http://blog.woremacx.com/";

sub query {
    my $q = shift;
#just for me
#    if (48 <= $q && $q <= 52) {
#        $q += 5;
#    }

    my $dbh_1 = "DBI:mysql:database=dbname;host=localhost";
    my $dbh = DBI->connect($dbh_1, "dbuser", "dbpass")
        || return $def;
    my $sth = $dbh->prepare(<<"EOSQL") || return $def;
  select
    mt_entry.entry_created_on, mt_entry.entry_basename,
    mt_blog.blog_site_url, mt_blog.blog_archive_url
  from
    mt_entry
  left join
    mt_blog on mt_blog.blog_id = mt_entry.entry_blog_id
  where
    entry_id = ?
EOSQL
;

    $sth->execute($q) || return $def;
    my $base;
    my $path = "";
    if (my @ref = $sth->fetchrow_array) {
        my ($c, $b) = ($ref[0], $ref[1]);
        my $d;
        if ($c =~ /^(\d+)-(\d+)/) {
            $d = "$1/$2/";
        }
        $base = $ref[2];
        if ($ref[3] =~ m|http://|) { $base = $ref[3]; }
        return "$base$d$b.html";
    } else {
        return $def;
    }
}

sub main {
    my $q = $ENV{PATH_INFO};
    my $rel;
    if ($q =~ m|^/archives/(\d{6}).html$|) {
        $rel = query($1);
    } elsif ($q =~ m|^/archives/(\d{4})_(\d{2}).html$|) {
        $rel = "$def$1/$2/";
    } else {
        $rel = $def;
    }
    my $x = CGI->new();
    print $x->redirect(
        -location => $rel,
        -status => 301,
    );
}

&main;

No TrackBacks

TrackBack URL: http://blog.woremacx.com/MT/mt-tb.cgi/51

Leave a comment