運用中のWordPressでhttps(SSL)化したときの不具合解消法

最近Wordpressで作ってるサイトをssl化しました。

運用中にssl化するときにいろいろ困ったのでメモしておきます。

やるべきことは2つあります。

  1. WordPressのダッシュボードで「サイトアドレス」2点の変更
  2. これまで投稿したすべての記事の内部リンク(完全URL)を変更

以下にまとめます。

WordPressのダッシュボードで「サイトアドレス」2点の変更

これは簡単です。
ダッシュボード

設定

一般

・WordPressアドレス(URL)
・サイトアドレス(URL)
WordPressのダッシュボードで「サイトアドレス」の変更

ここの2つの枠に「https」に変更されたURL、
「https://URL」を書き込みます。

これでOK。

これまで投稿したすべての記事の内部リンク(完全URL)を変更

これはちょっと大変。投稿があればあるほど大変。
もしデータベースを使えないのであればめっちゃ大変な作業です。

http→https 単純に文字置換の繰り返しです。

「http」を全部「https」に統一する。
これをやり終えたら「ssl化」は完了です。

対象のほとんどが投稿記事で使う写真。
画像URLは完全URLで文字としてデータベースに保存されてます。

その埋め込まれた完全URL「http://URL/photo/001.jpg」などを
新しい「s」がついたURL「https://URL/photo/001.jpg」へ、
頭の部分を変えていかねばならないのです。

例えば投稿が100記事あったら、100個はありますね。画像って。。。

一括置換の方法はphpMyAdminで

置換作業の手入力はめっちゃ大変なのでphpMyAdminを使いましょう。

phpMyAdminでSQL文を実行すれば、数秒で一括置換ができます

以下はoldをnewに変更させる構文です。
UPDATE wp_posts SET post_content=REPLACE(post_content,"old","new");
ご存知の方はこちらをコピペして作業してみてください。

phpMyAdminの使い方ガイド

Xサーバーであれば管理パネルにログインしたら
phpmyadmin(MySQL5.7)が使えます。
phpMyAdminの使い方ガイド

ID、パスを入れたら、こんな画面にログインできます。
ID、パスを入れたら、こんな画面にログインできます②

これがデータベースを扱う管理画面です。

作業前にバックアップをとってSQLでテスト置換してみよう

いきなり一発置換をやるのは怖いので、バックアップをとりましょう。
さらに、1記事だけ置換テストするのがオススメです。

目視で変わってるのを見ると安心ですよね。

順番に説明します。

手動バックアップ

phpMyAdminにログイン後、画面上部にある「エクスポート」メニューをクリックします。
画面上部にある「エクスポート」メニューをクリック
「詳細 – 可能なオプションを全て表示」の方をチェックします。
「詳細 - 可能なオプションを全て表示」の方をチェック
対象となるデータベースを選択します。
対象となるデータベースの選択
フォーマットはデフォルトで設定されている「SQL」を選択。
フォーマットはデフォルトで設定されている「SQL」を選択
ほかの設定はデフォルトのままでスクロールでOK。
最後に「実行」ボタンを押します。

選択したデータベースがエクスポートされます。
ファイル名は「MySQLのサーバ名.sql」です。

PCのダウンロードフォルダに格納されます。

これでエクスポートは完了。手動バックアップをしたことになります。
※レンタルサーバーでも自動バックアップはされています。

SQLでテスト置換してみる

WordPressは投稿情報が「wp_posts」というテーブルで管理してます。
その「wp_posts」の「post_content」というフィールド(縦列)で投稿記事がまとまっています。

一行に1記事というニュアンスです
(実際には自動保存やリビジョンがあるのでそうでもない・・・)。

削除してなかったWordPressのデフォルト記事を更新してみます。

phpmyadminのロゴクリック、データベースを選択
データベースを選択

一覧表示されたら「テーブル項目→wp_postsの表示」をクリック
wp_postsの表示

WordPressで登録された投稿一覧です(post_statusのフィールドのpublishが公開)
このID=5が「インストール時のデフォルト記事」です(IDの数字は人によって違います)。
WordPressで登録された情報が一覧表示

こちらのpost_contentの該当セルをダブルクリックすると、文字をコピーできます。
該当セルをダブルクリック

全部選択して、テキストにはりつけるとこんな感じの文字が入ってます。
デフォルトのサンプル記事ですね。

これはサンプルページです。同じ位置に固定され、(多くのテーマでは) サイトナビゲーションメニューに含まれるため、ブログ投稿とは異なります。サイト訪問者に対して自分のことを説明する自己紹介ページを作成するのが一般的です。たとえば以下のようなものです。
はじめまして。昼間はバイク便のメッセンジャーとして働いていますが、俳優志望でもあります。これは僕のサイトです。ロサンゼルスに住み、ジャックという名前のかわいい犬を飼っています。好きなものはピニャコラーダ、そして通り雨に濡れること。
または、このようなものです。
XYZ 小道具株式会社は1971年の創立以来、高品質の小道具を皆様にご提供させていただいています。ゴッサム・シティに所在する当社では2,000名以上の社員が働いており、様々な形で地域のコミュニティへ貢献しています。
新しく WordPress ユーザーになった方は、<a href=”http://abcdefghijklmn.jp/wp-admin/”>ダッシュボード</a>へ行ってこのページを削除し、独自のコンテンツを含む新しいページを作成してください。それでは、お楽しみください !

このサンプル記事の「

<a href=”http://abcdefghijklmn.jp/wp-admin/”>

」部分を置換してみます。


置換前
http://abcdefghijklmn.jp/wp-admin/
置換後
https://zzzaabbcc.jp/wp-admin/

SQL構文はこちら(oldからnewに変更させる構文です)。

UPDATE wp_posts SET post_content=REPLACE(post_content,"old","new");

これを参考にしてSQL文を書いたのがこれ。これで置換できます。

UPDATE wp_posts SET post_content=REPLACE(post_content,"http://abcdefghijklmn.jp/wp-admin/","https://zzzaabbcc.jp/wp-admin/") where ID=5;
※WHERE句は特定のレコードを抽出します。

これをSQLタブの空白に書きます。
phpmyadminの画面

そして実行ボタンを押すと・・・。実行完了。
実行完了。

確認してみます。同じくSQLタブで
SELECT * FROM wp_posts
の構文を書いて実行すると一覧が出ます。

その一覧からIDの5番の「post_content」をクリックしてみると、
文字が小さいですが、アドレスが変更されてることがわかります。
「post_content」をクリック

置換前
http://abcdefghijklmn.jp/wp-admin/


置換後
https://zzzaabbcc.jp/wp-admin/

先程のSQLの文で文字が置換されているのが確認できました。

置換の本番です

これで一括置換ができる、ということが目視でわかりました。
なのでこれから本番作業です。

同じSQLタブで、構文を書きますが、whereは外します。
SQL文の骨子はこれ。

UPDATE wp_posts SET post_content=REPLACE(post_content,"old","new");
※oldをnewに全部置換するよという意味です。

実行します。
SQL実行

実行完了。2998行変更しました。
2998行変更しました。

早速ググってサイトをチェックすると・・・
ssl化完了

やったね!
ssl化完了です。

この記事は以上です。

いつもありがとうございます。