WordPressのURL変更とSSL化でアクセス不可になった時の戻し方 | wp-configとDB

WordPressのURL変更とSSL化でアクセス不可になった時の戻し方 | wp-configとDB
結論

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を戻す

図の順に、切り分けなさい。

  1. 証明書のエラーなら、サーバー側でSSLが使える状態か確認するのよ。
  2. リダイレクトのループなら、後述の FORCE_SSL_ADMIN の節を見なさい。
  3. どちらでもなく、ログインできないなら、siteurlとhomeを元に戻すのよ。
  4. ログインできるなら、「直った後の確認」へ進みなさい。

サーバー側の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のバックアップを手動で取る方法を見なさい。

  1. FTPソフトか契約先のファイルマネージャーで、wp-config.phpをPCにコピーして保存しなさい。
  2. wp-config.phpを開きなさい。
  3. define() の行が並んでいる所に、次の2行を足すのよ。URLは、自分のサイトの、動いていたアドレスにしなさい。
  4. 保存して、サイトとログイン画面を開きなさい。
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のバックアップを取りなさい。

  1. 契約先の管理画面から、phpMyAdminを開きなさい。
  2. WordPressのDBを選ぶのよ。
  3. wp_options テーブルを開きなさい。
  4. option_name が siteurl の行を探して、option_value を編集するのよ。
  5. 同じように、home の行の option_value を編集しなさい。
  6. サイトとログイン画面を開いて、確認するのよ。

迷いやすい点が2つあるわ。

テーブルの名前が wp_options ではない場合があるの。 先頭の wp_ は、サイトによって違うのよ。wp-config.phpの $table_prefix で確認しなさい。

home の行が、最初のページにないことがあるわ。 一覧が複数ページに分かれている場合は、次のページを見なさい。

方法3:functions.phpに2行足して復旧する

wp-config.phpを触りたくない時の方法よ。FTPで、有効にしているテーマの functions.php を編集するの。

  1. functions.phpのバックアップを取りなさい。
  2. ファイルの先頭の <?php の直後に、次の2行を足すのよ。
  3. ログイン画面や管理画面を、何度か読み込みなさい。
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の設定が必要だという点よ。次は、これに沿った進め方よ。

  1. サイト全体のバックアップを取りなさい。
  2. サーバー側でSSLを設定して、https:// で表示できることを確認するのよ。
  3. 「設定」>「一般」で、WordPressアドレスとサイトアドレスを https:// に変えなさい。
  4. 管理画面の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行の追加は応急処置なので、外す・消すのを忘れない。
  • どの方法も、先にバックアップを取る。

ほかの記事

出典

この記事を書いた人

サチエ

サチエ

元銀座ママのサチエが、WordPressの困りごとを人生と夜の世界の例えで教えるサイトです。慌てる男はモテないわよ。順番よ、順番。

← 記事一覧に戻る