ドメイン変更(その2)

折角PHPにしているので、旧URLでのアクセスがあった場合にはスクリプトで新URLへ301リダイレクトするようにしました。

PHPでの301リダイレクトは、下記のように書けばできます。

<?php
  header("HTTP/1.1 301 Moved Permanently"); 
  header("Location: http://mayoi.net/"); 
  exit();
?>

今回は旧ドメインでのアクセスかどうかを判断する必要があるので、下記のようになります。

<?php
  if ($_SERVER['SERVER_NAME'] === 'valium.oops.jp')
  {
    header("HTTP/1.1 301 Moved Permanently"); 
    header("Location: http://mayoi.net/"); 
    exit();
  }
?>

実際には個別ページやアーカイブページなどにも正しくリダイレクトして欲しいので、下記のようにします。

まずテンプレートモジュールを新規作成し、下記の内容を「redirect_script」という名前で保存。

<?php
  $old_domain =  'valium.oops.jp'; // 旧ドメイン(適宜書き換え)
  $new_domain =  'mayoi.net';     // 新ドメイン(適宜書き換え)
  if ($_SERVER['SERVER_NAME'] === $old_domain)
  {
    $newurl  = 'http://';
    // host
    $newurl  .= $new_domain;
    // path
    $path = $_SERVER['SCRIPT_NAME'];
    if ($path{0} != '/')
    {
      if (!array_key_exists('REQUEST_URI',$_SERVER) or $_SERVER['REQUEST_URI']{0} != '/')
      {
        header("HTTP/1.1 301 Moved Permanently"); 
        header("Location: $newurl/"); 
        exit();
      }
      $parse_url = parse_url($newurl.$_SERVER['REQUEST_URI']);
      if (!isset($parse_url['path']) or $parse_url['path']{0} != '/')
      {
        header("HTTP/1.1 301 Moved Permanently"); 
        header("Location: $newurl/"); 
        exit();
      }
      $path = $parse_url['path'];
    }
    $newurl .= $path;
    header("HTTP/1.1 301 Moved Permanently"); 
    header("Location: $newurl"); 
    exit(); 
  }
?>

メインインデックス、アーカイブ(日別、カテゴリ別など)、個別アーカイブなどのテンプレートの先頭に下記を追加。

<$MTInclude module="redirect_script"$>

これでリビルドすれば完了。

コメントを残す

メールアドレスが公開されることはありません。