Movable Type (以降MT) からWordPress (以降WP) へ移行した際のリダイレクト設定に関するメモ。移行仕様は以下(URLはダミー)
URL | CMS | |
---|---|---|
旧サイト | 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”設置場所が異なる。
Type | URL |
---|---|
Entry | https://old.img8.com/archives/2021/08/000000.html |
Yearly archive | N/A |
Monthly archive | https://old.img8.com/archives/2021/08/ |
Daily archive | N/A |
Category archive | https://old.img8.com/archives/hardware/ |
Tag archive | https://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 pattern | https://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 pattern | https://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 pattern | https://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 pattern | https://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 pattern | https://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 | コピー先 |
---|---|---|
A | https://old.img8.com/hoge.gif | https://new.img8.com/uploads/mt/ |
B | https://old.img8.com/uploads/[yyyy]/[MM]/ hoge .png | https://new.img8.com/uploads/mt/uploads/[yyyy]/[MM]/ |
C | https://old.img8.com/assets_c/[yyyy]/[MM]/hoge.png | https://new.img8.com/uploads/mt/assets_c/[yyyy]/[MM]/ |
D | http://old.img8.com/archives/hoge.jpg | https://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/~
- /~