化石のような WordPress サイトのアップデート案件があり付随して SSL 化されてなかったので SSL 化したのでログとしてのメモ。
1. テーマ内にハードコーディングされている URI を修正する
OGP設定や CDN などテーマ内にハードコーディングされている http
から始まる URI があれば https
始まりに修正する。サイト内で参照しているパスであれば /
始まりに変更しておく方が今後の取り回しが楽になりそう。
2. 管理画面で http
な URI が入力されている箇所を修正する
2-1. 一般設定 WordPress のアドレス・サイトアドレスを修正
WordPress アドレス
と サイトアドレス
を https
から始まる URI に変更して保存
2-2. [Optional] メディアのアップロード先を変更している場合はフルパスを修正する
ファイルアップロード > ファイルへの完全な URL パス
を https
から始まる URI に変更して保存
3. 投稿などに含まれる URI の置き換え
投稿など Database に保存されているコンテンツ内に http
から始まるものがあれば https
に置き換える。
全てのコンテンツを目視で確認するのは大変なので search-regex というプラグインを使うのが楽。
4. http から始まる URI でアクセスされた場合に https にリダイレクトさせる
SSL 化前の http から始まるアドレスでアクセスされた場合に https に自動的にリダイレクトするようにする。
WordPress を設置しているサイトの root の .htaccess
に下記を追加する
.htaccess
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule>
⚠ リダイレクトの設定は WordPress のルールより先に書かないと上手く動作しない
https にリダイレクトするルールは WordPress が出力するルールより先に記述されていないと https にリダイレクトされないので注意が必要
.htaccess
# WordPress のルールより先に https へのリダイレクト設定のルールを書く <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule> # BEGIN WordPress <IfModule mod_rewrite.c> ...
WordPress は構造上アクセスを root の index.php
に送って Routing しているので、先に WordPress の index.php
へのリダイレクトルールがあると https へのリダイレクトが上手く動作せず、先に https へのリダイレクトルールが有る場合は先に https にリダイレクトさせた URI を index.php
に渡して WordPress のルーティングさせるので上手く動作する。という認識です。(正確ではないかもです)
これで SSL 化されてない WordPress の SSL 化対応を行なうことができました。
テーマ内の JS や CSS など発見が難しい所にハードコーディングされた URI があると結構ハマりどころなので、極力 /
始まりの URL を使ったり WordPress の設定から URI が生成できる hooks ・メソッドを使っておくのが良さそうだと思いました。
更新やメンテナンスをせずに何年もたったサイトを一気にアップデートするのはメンテせずに築年数のたった家を一気にリフォームするようなもので工数・金額もかかってしまいますから、サイト管理者の方はホントランニングコストかけてでも定期的にメンテした方が良いと思います… (本当にお願いします…)
おわり
[参考]