カテゴリー
Develop

Movable typeからWordPress移行のリダイレクト設定

Movable Type (以降MT) からWordpress (以降WP) へ移行した際のリダイレクト設定に関するメモ。移行仕様は以下(URLはダミー)

URLCMS
旧サイトhttps://old.img8.com/Movable Type
新サイトhttps://new.img8.com/WordPress

課題

  • MTの投稿URLを”MTEntryID”で設定していた。
  • MTの投稿Exportで”MTEntryID”は出力されない。
  • “MTEntryID”をWPへImportできない。
  • WPにMTのURLを継承できなかった。

このため、旧サイトの投稿URLをすべて新サイトの投稿URLにリダイレクトさせる必要がある😭

※後日、”MTEntryID”をExportする方法を発見😅 ( [WordPress]IDを維持したままMovable Type 3.2からWordPress2.0.2へ移行する )

MTのページURLパターン

MTでは以下パターンのページが存在していた。Tag archiveはMT検索で出力される動的ページのため”.htaccess”設置場所が異なる。

TypeURL
Entryhttps://old.img8.com/archives/2021/08/000000.html
Yearly archiveN/A
Monthly archivehttps://old.img8.com/archives/2021/08/
Daily archiveN/A
Category archivehttps://old.img8.com/archives/hardware/
Tag archivehttps://mt.img8.com/mt-search.cgi?IncludeBlogs=2&tag=Flash&limit=20

old.img8.comに対する転送

まずは”old.img8.com”に対する設定から。ちなみに設定の検証は”htaccess tester – madewithlove“を利用。超便利😍

Entry

いわゆる投稿ページ。前述の通り”MTEntryID”をWPへ継承できなかったため、きちんと転送するには全ページのURLをRewrite指定する必要があるが、5,000件以上の投稿があるため断念。代替対応として、WPの月アーカイブに転送する形で対応。 (後述するMonthly archiveと統合もできるが、更に後述の画像系の転送もあるため分離して処理)

URL
アクセスURL (MT)https://old.img8.com/archives/2021/08/000000.html
URL patternhttps://old.img8.com/archives/[yyyy]/[MM]/[MTEntryID].html
転送URL (WP)https://new.img8.com/log/[yyyy]/[MM]/

RewriteCond

  • “archives”ディレクトリに入っていること
  • “archives”の後に2階層の数字ディレクトリ ([yyyy]/[MM]) があること
  • 拡張子がhtmlであること (URL末尾が”html”)
RewriteCond %{REQUEST_URI} ^/archives(.*)\.(html)$ [NC]
RewriteRule ^archives\/(\d*)\/(\d*)\/(.*)$ https://new.img8.com/log/$1/$2/ [R=301,L]

※([yyyy]/[MM])部分は一つにまとめられるかも・・・

Monthly archive

続いて月アーカイブ。これはEntryを元に普通に転送。

URL
アクセスURL (MT)https://old.img8.com/archives/2021/08/
URL patternhttps://old.img8.com/archives/[yyyy]/[MM]/
転送URL (WP)https://new.img8.com/log/[yyyy]/[MM]/

RewriteCond

  • “archives”ディレクトリに入っていること
  • “archives”の後に2階層の数字ディレクトリ ([yyyy]/[MM]) があること
  • ディレクトリであること (URL末尾が”/”)
RewriteCond %{REQUEST_URI} ^/archives\/(\d*)\/(\d*)\/$ [NC]
RewriteRule ^archives\/(\d*)\/(\d*)\/(.*)$ https://new.img8.com/log/$1/$2/ [R=301,L]

※([yyyy]/[MM])部分は一つにまとめられるかも・・・

Category archive

続いてカテゴリアーカイブ。

URL
アクセスURL (MT)https://old.img8.com/archives/hardware/
URL patternhttps://old.img8.com/archives/[cat_name]/
転送URL (WP)https://new.img8.com/log/category/[cat_name]/

RewriteCond

  • “archives”ディレクトリに入っていること
  • “archives”の後に数字以外のディレクトリがあること
  • ディレクトリであること (URL末尾が”/”)
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/archives\/(\D*)\/$ [NC]
RewriteRule ^archives\/(\D.*)\/$ https://new.img8.com/log/category/$1/ [R=301,L]

それ以外

上記ルールに該当しないページは、まるっとWPトップページに転送。

URL
アクセスURL (MT)https://old.img8.com/archives/hardware/
URL patternhttps://old.img8.com/archives/[cat_name]/
転送URL (WP)https://new.img8.com/log/category/[cat_name]/

RewriteCond

  • ドメインが”old.img8.com”であること
RewriteCond %{HTTP_HOST} ^(.*)old.img8.com [NC]
RewriteRule ^(.*) https://new.img8.com/$1 [R=301,L] 

アクセスの多いEntry

Entryを月アーカイブにざっくり転送する方針としたが、アクセス数の多いページは、訪問者の不便を緩和するために個別にリダイレクトを設定。(GAのLandingページのトップ50ぐらいを抽出)

RewriteCond

  • 条件は無し、RewriteRuleでそのまま置換
# sample
RewriteRule ^archives/2008/09/004078.html$ https://new.img8.com/log/2008/09/3428/ [R=301,L]

まとめ

適用順番を整理してまとめると以下。これを”.htaccess”に記述して”old.img8.com”直下に配置。

RewriteEngine On
# アクセスの多いEntry 
RewriteRule ^archives/2008/09/004078.html$ 
# ...50件程度

# Entry (Monthly archiveにざっくり転送)
RewriteCond %{REQUEST_URI} ^/archives(.*)\.(html)$ [NC]
RewriteRule ^archives\/(\d*)\/(\d*)\/(.*)$ https://new.img8.com/log/$1/$2/ [R=301,L]

# Monthly archive
RewriteCond %{REQUEST_URI} ^/archives\/(\d*)\/(\d*)\/$ [NC]
RewriteRule ^archives\/(\d*)\/(\d*)\/(.*)$ https://new.img8.com/log/$1/$2/ [R=301,L]

# Category archive
RewriteCond %{REQUEST_URI} ^/archives\/(\D*)\/$ [NC]
RewriteRule ^archives\/(\D.*)\/$ https://new.img8.com/log/category/$1/ [R=301,L]

# それ以外 (まとめてWPトップに転送)
RewriteCond %{HTTP_HOST} ^(.*)old.img8.com [NC]
RewriteRule ^(.*) https://new.img8.com/$1 [R=301,L] 

mt.img8.comに対する転送

対象はTag archive。MTでは検索機能に送信したQueryを元にページが生成されているが、WPではディレクトリ。

URL
アクセスURL (MT)https://mt.img8.com/mt-search.cgi?IncludeBlogs=2&tag=Flash&limit=20
URL patternhttps://mt.img8.com/mt-search.cgi?IncludeBlogs=2&tag=[tag_name] &limit=20
転送URL (WP)https://new.img8.com/log/tag/[tag_name]/

RewriteCond

  • Queryに”IncludeBlogs=2″が含まれること
  • Queryに”tag”、”limit”が含まれること
RewriteCond %{QUERY_STRING} IncludeBlogs=2&tag=(.*)&limit=(.*)
RewriteRule ^(.*)$ https://new.img8.com/log/tag/%1? [R=301,L]

これを”.htaccess”に記述して”https://mt.img8.com/”直下に配置。

MT画像の転送

続いてMT画像の転送も設定。画像の展開パターンは以下のような状態だった。結構メチャクチャだった😭これらの画像をWPの”uploads/mt”ディレクトリ以下にコピー。

Type旧URLコピー先
Ahttps://old.img8.com/hoge.gifhttps://new.img8.com/uploads/mt/
Bhttps://old.img8.com/uploads/[yyyy]/[MM]/ hoge .pnghttps://new.img8.com/uploads/mt/uploads/[yyyy]/[MM]/
Chttps://old.img8.com/assets_c/[yyyy]/[MM]/hoge.pnghttps://new.img8.com/uploads/mt/assets_c/[yyyy]/[MM]/
Dhttp://old.img8.com/archives/hoge.jpghttps://new.img8.com/uploads/mt/archives/

で、reweite設定は以下。これを前述の”old.img8.com”直下に配置した”.htaccess”の最初に追記。

RewriteEngine On

# A
RewriteCond %{REQUEST_URI} ^/archives\/(.*).(jpg|gif|png|jpeg)$ [NC]
RewriteRule ^archives\/((.*).(jpg|gif|png|jpeg))$ https://img8.com/uploads/mt/archives/$1 [R=301,L]

# B
RewriteCond %{REQUEST_URI} ^/uploads\/(.*).(jpg|gif|png|jpeg)$ [NC]
RewriteRule ^uploads\/((.*).(jpg|gif|png|jpeg))$ https://img8.com/uploads/mt/uploads/$1 [R=301,L]

# C
RewriteCond %{REQUEST_URI} ^/assets_c\/(.*).(jpg|gif|png|jpeg)$ [NC]
RewriteRule ^assets_c\/((.*).(jpg|gif|png|jpeg))$ https://img8.com/uploads/mt/assets_c/$1 [R=301,L]

# D
RewriteCond %{REQUEST_URI} ^/(.*).(jpg|gif|png|jpeg)$ [NC]
RewriteRule ^((.*).(jpg|gif|png|jpeg))$ https://img8.com/uploads/mt/$1 [R=301,L]

投稿内の参照URLの修正

転送設定は以上。併せて投稿内の<img>、<a>内の参照URLも新しいURLに置換。このへんはWPのプラグイン”Search Regex – WordPress プラグイン“を使って置換処理。 (時期によって異なる記述をしていたため、過去の自分を呪った😭)

存在した記述パターン例

  • https://old.img8.com/~
  • http://old.img8.com/~
  • //old.img8.com/~
  • /~

コメントを残す

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