マルチサイトかつ多言語というサイトのドメイン変更対応をしました。
ドメイン変更の記事はあるけれど、マルチサイトに関しては公開しているサイトってそうないので公開します。
- 古いドメイン:example.net_old
- 新しいドメイン:example.net_new
1. DBにドメイン名の置換
実をいうとこれで作業は終わりです。
突然こんなこと言ってごめんね。
でも本当です。
新しいドメインに変更するクエリを流して、少しだけ間をおいて、アクセスしたら終わりがきます。
DBの確認
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# mysql -u root -p MariaDB > show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | exampledb | +--------------------+ 13 rows in set (0.00 sec) |
ドメイン名を新しいドメインに置換します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
MariaDB [(none)]> use exampledb; UPDATE wp_options SET option_value = replace(option_value,'example.net_old','example.net_new'); UPDATE wp_blogs SET domain = replace(domain,'example.net_old','example.net_new'); UPDATE wp_site SET domain = replace(domain,'example.net_old','example.net_new'); UPDATE wp_sitemeta SET meta_value = replace(meta_value,'example.net_old','example.net_new'); UPDATE wp_posts SET post_content = replace(post_content, 'example.net_old', 'example.net_new'); UPDATE wp_posts SET guid = replace(guid, 'example.net_old', 'example.net_new'); UPDATE wp_postmeta SET meta_value = replace(meta_value,'example.net_old','example.net_new'); UPDATE wp_usermeta SET meta_value = replace(meta_value,'example.net_old','example.net_new'); UPDATE wp_2_options SET option_value = replace(option_value,'example.net_old','example.net_new'); UPDATE wp_2_posts SET post_content = replace(post_content,'example.net_old','example.net_new'); UPDATE wp_2_posts SET guid = replace(guid, 'example.net_old', 'example.net_new'); UPDATE wp_2_postmeta SET meta_value = replace(meta_value,'example.net_old','example.net_new'); ・・・(マルチサイトの数だけ繰り返す) UPDATE wp_5_options SET option_value = replace(option_value,'example.net_old','example.net_new'); UPDATE wp_5_posts SET post_content = replace(post_content,'example.net_old','example.net_new'); UPDATE wp_5_posts SET guid = replace(guid, 'example.net_old', 'example.net_new'); UPDATE wp_5_postmeta SET meta_value = replace(meta_value,'example.net_old','example.net_new'); |
データベース全件検索で古いドメインを検索しきって0にした。
これで終わりです。
さぁっ!生まれ変わったサイトにアクセスしてみよう。
管理画面にログイン出来ないのだが….?
ログインすると古いドメインにリダイレクトされる。
1′. プラグインが原因か?
プラグインを無効化してみる。
1 |
# ./wp-content/plugins ./wp-content/plugins_bak |
リネームすることで読み込ませなくする。
管理画面にログイン出きました!
プラグインに原因があることが確定ですね。
2′. キャッシュ系のプラグインか?
Redis関連のプラグインが原因のようです。
Redis系のキャッシュプラグインの存在を確認しました。
1 2 3 4 |
$ cd /etc/redis $ ls 6379.conf 6380.conf 6381.conf 6382.conf 6383.conf |
5つのredisサーバが動いているのだ。
Redisのキャッシュをクリアする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# redis-cli -h localhost -p 6379 localhost:6379> flushdb OK localhost:6379> exit # redis-cli -h localhost -p 6380 localhost:6380> flushdb OK localhost:6380> exit ・・・繰り返す # redis-cli -h localhost -p 6383 localhost:6383> flushdb OK localhost:6383> exit |
3′. ハードコーディングを撲滅する
ハードコーディングされている箇所を探す
1 2 3 4 5 6 |
# find `pwd` -type f -print | xargs grep 'example.net_old' /home/hoge/example.net/public/wp-content/themes/header.php: $e_url = 'https://www.example.net_old ・・・ |
新しいドメインに置換して完了ですね。
おしまい!
管理画面にもアクセス出来ましたね。
お疲れ様です。