URL変更とSSL化で入れなくなったら、「URL」と「SSL」を分けて考えなさい。先に、サイトのURLの設定(siteurlとhome)を、wp-configかDBで動いていた値に戻すのよ。どの方法でも、先にバックアップを取ってからね。
その顔、ただ事じゃないわね。順番に話してちょうだい。
サチエさん、WordPressのURLを変えて、SSL化もしたら、サイトにも管理画面にも入れなくなってしまって……。
あらあら。慌てる男はモテないわよ。大丈夫、ちゃんと戻せるわ。
戻し方を、教えていただけますか。
何が起きているか:WordPressアドレスとサイトアドレス
WordPressには、サイトのURLを決める設定が2つあるのよ。公式の説明は次のとおりよ。
| 設定 | DBの項目名 | 意味 |
|---|---|---|
| サイトアドレス | home | 訪問者がブラウザに入力するアドレス |
| WordPressアドレス | siteurl | WordPressのコアファイルがある場所 |
どちらも https:// を含めて書いて、末尾にスラッシュは付けないの。この2つのどちらかが間違っていると、サイトは正常に動かなくなるのよ。
URLを変えながらSSL化もすると、この2つが、実際に開けないアドレスになることがあるの。すると、管理画面にも入れなくなって、設定画面から直せないわ。だから、wp-config.phpかDBから直すのよ。
マルチサイトは手順が違って、DBの手動編集が必要よ。この記事では扱わないわ。
症状から原因を切り分ける
まず、ブラウザに出ている症状を見なさい。次の表は、見分ける時の目安よ。
| 症状 | 考えられる原因 |
|---|---|
| 「リダイレクトが多すぎます」などのループ | 管理画面のSSL強制(FORCE_SSL_ADMIN)と、リバースプロキシの組み合わせ |
| 証明書のエラーが出る | サーバー側でSSLの設定が済んでいないことがある |
| ログイン画面に戻される、画面が崩れる | siteurlとhomeの値が、実際のアドレスと違うことがある |

図の順に、切り分けなさい。
- 証明書のエラーなら、サーバー側でSSLが使える状態か確認するのよ。
- リダイレクトのループなら、後述の
FORCE_SSL_ADMINの節を見なさい。 - どちらでもなく、ログインできないなら、siteurlとhomeを元に戻すのよ。
- ログインできるなら、「直った後の確認」へ進みなさい。
サーバー側のSSL設定の画面は、契約先ごとに違うの。契約先のマニュアルで確認してちょうだい。
siteurlとhomeを戻す方法は、方法1〜4の4つよ。上から順に試す必要はないわ。使える道具で選びなさい。
- wp-config.phpをFTPなどで編集できる:方法1。一番手軽な応急処置よ。
- phpMyAdminが使える:方法2。固定せずに、DBの値そのものを直すの。
- wp-config.phpを触りたくない:方法3。
- WP-CLIが使える:方法4。
方法1:wp-config.phpでURLを固定して入る
管理画面に入れなくても、FTPなどでwp-config.phpを編集できれば復旧できるわ。
編集の前に、wp-config.phpのバックアップを取りなさい。編集の基本はwp-config.phpの編集方法にまとめてあるわ。サイト全体のバックアップはWordPressのバックアップを手動で取る方法を見なさい。
- FTPソフトか契約先のファイルマネージャーで、wp-config.phpをPCにコピーして保存しなさい。
- wp-config.phpを開きなさい。
define()の行が並んでいる所に、次の2行を足すのよ。URLは、自分のサイトの、動いていたアドレスにしなさい。- 保存して、サイトとログイン画面を開きなさい。
define( 'WP_HOME', 'https://自分のドメイン' );
define( 'WP_SITEURL', 'https://自分のドメイン' );
https:// を含めて、末尾にスラッシュは付けないの。example.com のまま保存しては駄目よ。
この設定には、知っておく点が3つあるわ。
- 公式は、これを「必ずしも最良の修正ではない」としているのよ。値を直接書いて固定しているだけだからね。
- 固定している間は、管理画面の「設定」>「一般」で、この2つの値を編集できなくなるわ。
- 定数は、DBの値を上書きするだけなの。DBの値は書き換わらないわ。2行を外せば、DBの値に戻るのよ。
ログインできたら、固定は応急処置と考えなさい。2行を外す前に、方法2のphpMyAdminで、DBの値が正しいか確認するのよ。固定中は、DBの値を設定画面から確かめにくいの。固定のままだと、あとでURLを変える時に、設定画面で編集できなくて困るわ。
方法2:phpMyAdminでsiteurlとhomeを直す
wp-config.phpで直らない時や、固定せずにDBを直したい時は、phpMyAdminでDBの値を直接書き換えるの。
DBの操作は、誤ると戻せなくなることがあるわ。先に、DBのバックアップを取りなさい。
- 契約先の管理画面から、phpMyAdminを開きなさい。
- WordPressのDBを選ぶのよ。
wp_optionsテーブルを開きなさい。option_nameがsiteurlの行を探して、option_valueを編集するのよ。- 同じように、
homeの行のoption_valueを編集しなさい。 - サイトとログイン画面を開いて、確認するのよ。
迷いやすい点が2つあるわ。
テーブルの名前が wp_options ではない場合があるの。 先頭の wp_ は、サイトによって違うのよ。wp-config.phpの $table_prefix で確認しなさい。
home の行が、最初のページにないことがあるわ。 一覧が複数ページに分かれている場合は、次のページを見なさい。
方法3:functions.phpに2行足して復旧する
wp-config.phpを触りたくない時の方法よ。FTPで、有効にしているテーマの functions.php を編集するの。
- functions.phpのバックアップを取りなさい。
- ファイルの先頭の
<?phpの直後に、次の2行を足すのよ。 - ログイン画面や管理画面を、何度か読み込みなさい。
update_option( 'siteurl', 'https://自分のドメイン' );
update_option( 'home', 'https://自分のドメイン' );
直ったら、必ずこの2行を削除しなさい。 公式も、削除するよう注意しているわ。URLは、自分のものにするのよ。テーマに functions.php が無い時は、<?php と2行だけのファイルを作って置いて、直ったら削除しなさい。example.com のままにしては駄目よ。
方法4:WP-CLIで直す(使える場合)
サーバーでWP-CLIが使えるなら、コマンドで直せるわ。
wp option update home 'https://自分のドメイン'
wp option update siteurl 'https://自分のドメイン'
記事の本文やリンクの中に、古いURLが残っている場合は、wp search-replace で一括で置き換えるのよ。
wp search-replace 'http://古いURL' 'https://新しいURL' --skip-columns=guid --dry-run
- 先に
--dry-runを付けなさい。DBには保存されず、置き換わる結果のレポートだけが表示されるわ。 - GUID列は変えないの。
--skip-columns=guidを付けなさい。公式は、GUID列の内容は絶対に変えてはいけないとしているのよ。 - シリアライズされたデータは、コマンドが安全に扱ってくれるわ。DBの全体をテキストエディタで置換しては駄目よ。
管理画面のSSL強制(FORCE_SSL_ADMIN)でループする時
ログインと管理画面でSSLを強制する設定が、wp-config.phpにあるのよ。
define( 'FORCE_SSL_ADMIN', true );
この設定は、wp-config.phpに書くの。プラグインの中で定義しても効かないわ。使う前に、サーバー側でSSLと、secure virtual host(SSL用の設定)を済ませておく必要があるのよ。サーバー側の準備なしに足すと、入れなくなることがあるわ。
リバースプロキシがSSLを処理している環境では、この設定が無限のリダイレクトループになることがあるの。公式の対処は、プロキシが送る HTTP_X_FORWARDED_PROTO ヘッダーを見て、$_SERVER['HTTPS'] を on にする方法よ。ヘッダーの値が「http,https」のように複数になることがあるから、strpos で判定するのよ。
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] )
&& strpos( $_SERVER['HTTP_X_FORWARDED_PROTO'], 'https' ) !== false ) {
$_SERVER['HTTPS'] = 'on';
}
公式のサンプルでは、この記述を FORCE_SSL_ADMIN の行の直後に置いているわ。上のコードは、公式のサンプルに、ヘッダーが無い時のエラーを防ぐ isset を足した形よ。プロキシがNginxの場合は、X-Forwarded-Proto などのヘッダーを、プロキシ側から渡す設定も必要なの。
自分のサーバーがプロキシの後ろにあるかどうかは、契約先の案内で確認しなさい。分からない時は、一般的な切り分けとして、FORCE_SSL_ADMIN の行を一時的にコメントアウトして、入れるか試すのよ。
SSL化の進め方
SSL化は、URL変更とは別の作業として進めなさい。公式は、HTTPS化の順序を決めて示してはいないの。公式で確認できるのは、FORCE_SSL_ADMIN を使う前に、サーバー側でSSLの設定が必要だという点よ。次は、これに沿った進め方よ。
- サイト全体のバックアップを取りなさい。
- サーバー側でSSLを設定して、
https://で表示できることを確認するのよ。 - 「設定」>「一般」で、WordPressアドレスとサイトアドレスを
https://に変えなさい。 - 管理画面のSSL強制(
FORCE_SSL_ADMIN)は、サーバー側のSSLが動いてから足すのよ。
手順2で https:// が開けない状態では、手順3に進んでは駄目。ここで進むと、今回みたいに入れなくなるわ。
サーバー側のリダイレクトの設定は、.htaccessとリダイレクトのトラブルも見なさい。
直った後の確認
https://自分のドメインで、サイトが表示される。https://自分のドメイン/wp-admin/で、ログインできる。- 「設定」>「一般」の2つのアドレスが、
https://で、末尾にスラッシュがない。 - wp-configで固定した場合は、DBの値が正しいことを確認してから、2行を外す。
- functions.phpに足した2行は、削除済み。
ログインのパスワードが分からなくなっていた場合は、ログインできない時のパスワード再設定を見なさい。
のりお、順番は分かった?
はい。URLを元に戻してから、SSLを順番に進めます。バックアップも、先に取ります。
それでいいのよ。やればできるじゃない。
まとめ
- URL変更とSSL化は、分けて考える。
- 先に、siteurlとhomeを、動いていた値に戻す。
- 戻し方は、wp-configで固定する、phpMyAdminで直す、functions.phpに2行足す、WP-CLIで直す、の4つ。固定や2行の追加は応急処置なので、外す・消すのを忘れない。
- どの方法も、先にバックアップを取る。




