2016年6月29日水曜日

【備忘録】WordPressサイトを常時SSL化(http:// → https://)したときのメモ(nginx / http2.0編)

常時SSL化そのものはいろいろ情報がでているので割愛。
ここでは自分でやってみて引っかかった点を備忘録メモしておきます。

自分用なので、次の前提があるとします。

  • サーバーにログインでき、ファイルへの書き込み権限があること
  • WP-CLIが使えること
  • find / grep / sed / egrep コマンドが使えること

データベースの書き換え


  • wp search-replace  http://◯◯  https://◯◯  --skip-columns=guid

WP-CLIを使うと簡単ですね!
※ --skip-columns=guid は、GUIDを変更しないというものです。公開前サイトからURL変更する場合には不要ですが、それ以外は基本的に GUIDの置換はしないことが望まれています。詳しくは、WordPress のドメイン名やURLを変える際の GUID 問題のちゃんとした話(CAPITAL P)で詳しく解説されているので参考にしてみてください(2017.01.25追記)

テーマ内ファイルの書き換え


  • cd  /□□/wp-content/themes/テーマ(自分のテーマディレクトリに移動)
  • find . -name "*" -type f -exec grep -l 'http://◯◯' "{}" \;| egrep '\.php$|\.css$|\.js$' | xargs sed -i.bak -e 's|http://◯◯|https://◯◯|g'

とかで、拡張子を絞ってサブディレクトリを含むテーマ内の全ファイルをチェックし、 http://◯◯ → https://◯◯ 一括置換します。

nginx の場合、https 内に http の外部ソース読み込みがあるとエラーがでますので、修正が必要です。Chrome等の「要素の検証」エラー箇所をチェックして置換していきます。
私が遭遇したのが
  • http://fonts.googleapis.com
  • http://ajax.googleapis.com
でした。これらは、https:// に書き換える必要があります。

  • cd  /□□/wp-content/themes/テーマ(自分のテーマディレクトリに移動)
  • find . -name "*" -type f -exec grep -l 'http://fonts.googleapis.com' "{}" \;| egrep '\.php$|\.css$|\.js$' | xargs sed -i.bak -e 's|http://fonts.googleapis.com|https://fonts.googleapis.com|g'
  • find . -name "*" -type f -exec grep -l 'http://ajax.googleapis.com' "{}" \;| egrep '\.php$|\.css$|\.js$' | xargs sed -i.bak -e 's|http://ajax.googleapis.com|https://ajax.googleapis.com|g'

でいけるでしょう。
あとバックアップとして .bak (.bakがあれば、 .bak.bak と追加) が出来ます。
が、まぁこういう一括置換する前にはデータのバックアップをしておいたほうがいいです、というかしましょう。

ビジュアルエディタが真っ白


になるサイトもあります。
にも以前纏めましたが、とりあえず短絡的には wp-config.phpに
  • define('CONCATENATE_SCRIPTS', false );
を追加しておけばいいでしょう。

エラーがでて全く動作しない(PHPエラー)


今日もっとも悩んだのがこれでした。同じサーバーなら起こらないですが、サーバー移転と同時に移転先を 常時 SSLにするケースでは起こりえます。

いくつかのテーマテンプレートでエラーがでてしまうのです。
問題なさそうにみえるのですが直らず。結局、ブロックごとに1つずつ抜いていって原因となる所を限定し、目を更にしてみてみると、、、
  • <? if ( ◯◯ ) ?>
が混じってた...テンプレートが1700行もある巨大なもの(ひぇ〜)なので、なかなか気づけませんでした。何かって、 <?php if( ◯◯ ) ?>  phpが抜けてますよね。
前のサーバーでは、 <?   ?> も許容していました。ですが新サーバーでは許容する設定をしてません。しなくてもいいのが理想なので、全部置換(「<? 」→「<?php 」)しちゃいました。
  • cd  /□□/wp-content/themes/テーマ(自分のテーマディレクトリに移動)
  • find . -name "*.php" -type f -exec grep -l '<? ' "{}" \;| xargs sed -i.bak -e 's|<? |<?php |g'

自分が作ったテーマテンプレートならともかく、人が作ったものを解析するのがとても大変ですね ... ふぅ。

2016年6月29日 @kimipooh



0 件のコメント:

コメントを投稿