トイレのうず

WordPressのドメイン変更では直接SQLで置換しない方がいい

当記事はアフィリエイト広告を掲載しています。

MAMP にローカルホスト設定し、ドメインで接続できるようにしたのですが、アクセスするドメインが変更になったので WordPress 側にも手を加えてやる必要があります。 MAMP でバーチャルホストをたてた記録は下記。
→ MAMP でバーチャルホストを設定して複数ドメインで運用する方法

アクセスするドメインが変更になるということは、ドメインを移行したことになります。具体的には下記のよう。

  • 変更前 192.168.xx.xx/wordpress
  • 変更後 theme.1010uzu.com

はじめは 同一ドメインの www.1010uzu.com に設定しようと思っていたのですが、 Hoster で切り替えないとこのブロクにアクセスできないのは不便だなと思いやめました。備忘録的に使っているので見れないと作業がはかどらないのです。なので MAMP にバーチャルホストをもう 1 つ設定しました。

以前 WordPress にアクセスするアドレスを変更した際は管理画面からアドレスを書き換えただけだったのですが、これだとデータベース上に保存されている IP アドレスや URL がそのままになってしまうので問題が発生します。以下は以前アクセスするアドレスを変更したときの記録ですが、管理画面で変更しただけなので、 wp_posts テーブルに localhost の URL が残ったままになっていました。
→ MAMP 上の WordPress でページ遷移ができない

phpMyAdmin で SQL を叩いて変更すればいいじゃないと思うかもしれませんが、配列でデータが保存されている場合、 WordPress ではシリアライズして保存しているので、文字数が変わると上手く動作しなかったりします。なので以下の専用の置換スクリプトを使用します。
→ Interconnect IT : WordPress Serialized PHP Search Replace Tool

使い方は下記のサイトを参考にしました。
→ infoScoop 開発者ブログ: WordPress 移行時に URL を SQL で直接一括置換はダメ! 「 Search and Replace for WordPress Databases Script 」を使おう

バックアップ

置換スクリプトをかける前にバックアップを取りました。データベースをいじるので不測の事態に備えて phpMyAdmin からエクスポートしました。

  • WordPress フォルダ
  • データベース

wp-config.php ファイルでデータベースの接続情報を編集

必要があれば wp-config.php を編集します。今回はローカル環境でありデータベースの移行はないので、以前設定したときのままです。
→ MAMP で WordPress をローカル環境にインストール

define('DB_NAME', 'wp01');
define('DB_USER', 'root');
define('DB_PASSWORD', 'root');
define('DB_HOST', 'localhost');

置換スクリプトのダウンロードと実行

以下のサイトから最新版の 3.1.0 をダウンロードしました。
→ Interconnect IT : WordPress Serialized PHP Search Replace Tool

「 Search-Replace-DB-master.zip 」というファイルがダウンロードされるので解凍すると「 Search-Replace-DB-master 」というフォルダができます。これを wp-config.php と同じ階層にインストールします。このサイトは下記のように WordPress のコアファイルを wp フォルダに入れ 1 階層下げているので、ルートでは動きませんでした。
→ WordPress を別のディレクトリに移動する

下記のアドレスにアクセスします。
http://theme.1010uzu.com/wp/Search-Replace-DB-master/

「 http://theme.1010uzu.com/wp/ 」は WordPress コアファイルまでのパスです。

Search Replace DB の画面

こんな画面が表示されるので、 replace with に置換文字列を入力します。何の文字列を (replace) 何で (with) で置換するという意味です。気をつけたいのは「 http:// 」を抜くことです。「 http:// 」ありなし両方で保存しているデータがあるみたいです。(わたしはここで変更前の IP アドレスを間違って入力し、小 1 時間悩みました。)

そして「 dry run 」を押して試しに実行してみます。こんな感じでいくつ置換されるか表示されます。

dry run で試しに実行したところ

よければ「 live run 」を実行します。確認画面が出てくるので「 OK 」をクリックすると、 SQL が実行されデータベースが書き換えられます。

live run で本当に実行するか確認
live run の実行結果

(書き換えできなかったのは wp_similar_posts は関連ページを表示している Similar Posts というプラグインのテーブルです。 )

ついでに以前 localhost で運用していた時の残骸も置換しました。

置換が終わったら必ず「 Delete 」をクリックし置換スクリプトを削除します。置いたままだと、簡単にデータベースにアクセスし変更が可能なので大変危険です。

以上のデータベースの置換で WordPress にアクセスできるはずです。

.htaccess の書き換え

アクセスできない場合はいくつか原因がありますが、わたしは結構悪戦苦闘しました。まず「 http://theme.1010uzu.com 」にアクセスすると、「 http://theme.1010uzu.com/wordpress 」にリダイレクトされます。もちろん表示はされません。変更前はサーバーの「 wordpress 」というディレクトリがトップページ(フロントページ)で変更後はルートがトップページになるので、「 .htaccess 」を書き換える必要があるようです。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>
# END WordPress

「 /wordpress 」を削除します。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

MAMP の再起動

これで表示されたと思ったら、トップページ(フロントページ)がある投稿記事にリダイレクトされてしまいました。他のページは見れているので、設定が間違っているわけではなさそうです。何が原因かさっぱりわからず、サーバー (Apache) の再起動、プラグインをすべて停止し、テーマをデフォルトで配布されているものに変更しましたが、結果は変わらず。最後にバーチャルホストを設定している MAMP を一度終了し、再度起動したら、問題なくフロントページが表示されました。

→ WordPress Codex 日本版: WordPress の引越し:ドメイン名または URL を変更するとき 

上記サイトに下記のような記述があったので、 Apache は再起動したのだけれど、 MAMP 自体を終了しなくてはならないとは盲点でした。

14. ときには、あなたのサーバーを再起動すべきかもしれません。さもなければ、あなたのサーバーはエラーを返すかもしれません。 (MAMP ソフトウェア (Mac) で起こります。 )

これで MAMP を使ってバーチャルホストをたて、ドメインでテストサイトに接続できるようになりました。

関連記事

独自ドメインの設定がうまくいかない(泣)
WordPressぼやき
thumbnail
MAMP 上の WordPress でページ遷移ができない
WordPress
CSSが適用されない
MAMP で WordPress をローカル環境にインストール
WordPressMac
MAMP 許諾画面
WordPress のタイトル表示を変更してみた
WordPress
thumbnail
WordPress ではタイトルの最初の 22 文字(全角)が同じだとインポートできない
WordPress
パーマリンク設定
WordPress パーマリンクを途中から変更できるプラグイン Advanced Permalinks
WordPress
Advanced Permalinks の Post ID 別パーマリンク設定画面