ちょっとまえからさくらインターネットの共用サーバーで独自ドメインのSSLが使えるようになりました。ちょっと前と言っても1年以上前ですけど。たぶん。
証明書の費用は年間1500円程度で、しかもキャンペーンをやってたので3年分買ってみたんですが、その後ダラダラと放置していたのをようやく設定しました。SSL 自体は設定済みで静的ページへは適用してたんですが、WordPress はちょっとめんどくさそうだ、ってことでのびのびに。
とはいってもさくらで WordPress ぐらいの組み合わせなら検索すれば情報はたくさん出てきますので、難しいことはありませんでした。ちょっと面倒なぐらい。
作業としては .htaccess と wp-config に数行ずつ書き加えます。どちらも前のほうで。少なくとも WordPress が自動生成している内容より前で。独自に何か追加している場合は内容によって検討してください。
.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/wp-cron.php$
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
RewriteRule ^(.*)$ https://example.com/$1 [R=307,L]
# RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
</IfModule>
転送のステータスは最初 307 に設定しておきます。最終的には 301 にするんですが、いきなりやって失敗するとブラウザが転送をキャッシュしてしまうので、最初は 307 で動作を確認してから 301 に変更するのがおすすめです。
wp-config.php
if( isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR']) ) {
$_SERVER['HTTPS'] = 'on';
$_ENV['HTTPS'] = 'on';
$_SERVER['HTTP_HOST'] = 'example.com';
$_SERVER['SERVER_NAME'] = 'example.com';
$_ENV['HTTP_HOST'] = 'example.com';
$_ENV['SERVER_NAME'] = 'example.com';
}
どちらも example.com を変更するのを忘れずに。
内容を簡単に説明するとまず .htaccess で HTTP:X-Sakura-Forwarded-For が空っぽの場合はアドレスを SSL 用に書き換えます。SSL 用のアドレスにアクセスしている場合は HTTP:X-Sakura-Forwarded-For の中身に SSL プロキシのアドレスが入っています。
wp-cron を除外してるのは転送がループして予約投稿に失敗するから。ええ、失敗しました。この記事の投稿で。😵
その後 wp-config で環境変数を SSL アクセス用に書き換えてます。
これで基本的には SSL 経由で表示されるようになりますが、アドレスバーに警告が表示される場合はテーマなどで使っている画像などが http で呼び出されていないか確認してください。ウィジェットのテキストエリアとか。ソース表示にして http: を検索してみましょう。あと SSL を利用する場合は www がありかなしかで統一される(場合が多い)のでその辺も確認します。
SSL が使えるようになるとフォームの項目に制約が減りますが、メールで受信するときに平文だった、なんてオチがつかないように気をつけましょう。
参考サイト