Dec 25, 2009

/modules/comment/theme/post-form.html の修正

Loggix 最新版にバグがあったので、修正。今度のも動作には問題ないが、修正しないと各個別記事(index.php?id=XXXの時)ではThe W3C Markup Validation Servicevalidが貰えないどころか、Passedにもならない。

修正箇所はpost-form.htmlの6行目と7行目。なぜこんなところに<body></body>があるのか。

  • 修正後のコード(赤字部分が修正箇所)
<!-- Comment form -->
<body>
</body>  
<form id="addform" action="<?php echo $item['cd']?>/modules/comment/post.php" method="post">

これで、とりあえずPassedがもらえるようになったが、まだValidではない。でもuser_emailの初期値は空欄にしとかないとダメだよね。だからこれで良いんだと思っている。

PHPを使った「 301 Redirect 」の設定

Blogを統合する際、旧Blogから全ログを新Blogに引き継いだため、旧Blogは閉鎖して新Blogに 301 Redirect させることにしました。単純にindex.phpへのアクセスをRedirectさせるだけなら、.htaccessを使って次のようにRedirectさせれば良いだけです。

Redirect permanent /index.php http://新URI/index.php

または、

Redirect permanent / http://新URI/

ところが、今回は単純なURI移動ではなくて2つのBlogを1つにまとめており、しかも両Blogのログを時系列に並べ替えています。したがって、旧Blogの各記事への直接リンクは、.htaccessでの設定では適切にRedirectさせることができませんでした。いろいろ調べたのですが、上手い方法が見つからなかったので、最終的にはXREAのユーザー掲示板で教えを乞い、PHPを使ったRedirect設定を使うことにしました。

PHPを使った 301 Redirect

ネタ元とゆーか、教えていただいたXREAユーザー掲示板の該当スレッドはこちらです。shimix様、有益な方法を教えていただいて有り難うございました。

具体的には、次のようなPHPファイルを作成し、P_BLOGの場合はarticle.php、Loggixの場合はindex.phpと差し替えます。 “newid”の*の部分を新Blogで対応する記事番号にしていけば良いわけです。

<?php
$id = $_GET['id'];
if ($id == '1') { $newid = '*'; }
if ($id == '2') { $newid = '*'; }
if ($id == '3') { $newid = '*'; }
    :
    :
header( 'HTTP/1.1 301 Moved Permanently' );
header( 'location: http://new.example.com/index.php?id='. $newid );
?>

記事数が多いといささか大変ですが、不規則な記事idへ301ステータス付きでRedirectできるのが素晴らしいところです。

なお、Loggixの方はこれだけでOKですが、P_BLOGの方はindex.phpへのリンクやcategory.php、search.phpへのリンクも考えられるので、これらを新Blogのindex.phpへRedirectさせるように.htaccessでの Redirect permanent も併用すると良いでしょう。

以上