かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

WordPress SSL 化のメモ

化石のような WordPress サイトのアップデート案件があり付随して SSL 化されてなかったので SSL 化したのでログとしてのメモ。

1. テーマ内にハードコーディングされている URI を修正する

OGP設定や CDN などテーマ内にハードコーディングされている http から始まる URI があれば https 始まりに修正する。サイト内で参照しているパスであれば / 始まりに変更しておく方が今後の取り回しが楽になりそう。

2. 管理画面で httpURI が入力されている箇所を修正する

2-1. 一般設定 WordPress のアドレス・サイトアドレスを修正

WordPress > 設定 > 一般

WordPress アドレスサイトアドレスhttps から始まる URI に変更して保存

2-2. [Optional] メディアのアップロード先を変更している場合はフルパスを修正する

WordPress > 設定 > メディア

ファイルアップロード > ファイルへの完全な 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 しているので、先に WordPressindex.php へのリダイレクトルールがあると https へのリダイレクトが上手く動作せず、先に https へのリダイレクトルールが有る場合は先に https にリダイレクトさせた URIindex.php に渡して WordPress のルーティングさせるので上手く動作する。という認識です。(正確ではないかもです)

これで SSL 化されてない WordPressSSL 化対応を行なうことができました。
テーマ内の JS や CSS など発見が難しい所にハードコーディングされた URI があると結構ハマりどころなので、極力 / 始まりの URL を使ったり WordPress の設定から URI が生成できる hooks ・メソッドを使っておくのが良さそうだと思いました。

更新やメンテナンスをせずに何年もたったサイトを一気にアップデートするのはメンテせずに築年数のたった家を一気にリフォームするようなもので工数・金額もかかってしまいますから、サイト管理者の方はホントランニングコストかけてでも定期的にメンテした方が良いと思います… (本当にお願いします…)

おわり


[参考]