このブログは、さくらインターネットのさくらのレンタルサーバー上で、WordPress を用いて運営しています。
最近のトレンドに合わせて https での接続ができるようにしているのですが、さくらのレンタルサーバーでそれを実現する際に注意すべき点があったので、本記事にまとめておきます。
端的に言えば、通常のサーバーとは少し異なる対応が必要です。
参考:
WordPressをhttps化する方法とさくらサーバーでの注意事項 – ウェブタタン
レンタルサーバ【WordPress】常時SSL化プラグイン トラブルシューティング – さくらのサポート情報
コンテンツ
SSL証明書を取得・設定する
httpsにするには、なにはともあれ、SSL証明書が必要です。さくらのレンタルサーバーを利用するのであれば、証明書もさくらを利用するのが手早いでしょう。最も安い証明書だと RapidSSL で年額 1,620 円です。レンタルサーバー側の設定も楽です。
WordPressの設定をする
WordPress の 設定 → 一般 の中の「WordPress アドレス (URL)」と「サイトアドレス (URL)」を、https のアドレスへ書き換えます。
また、既存の記事がある場合は、記事内のブログ内リンクや画像のリンクを、httpsのアドレスへ書き換えます。これは、httpsのページの中にはhttp接続のコンテンツを埋め込むことができないためです。Search Regexプラグインなどを用いて、既存記事を検索、書き換えます。
HTTPSへ転送するための.htaccessの編集
.htaccessへ、次のように書き加えます。
SetEnvIf REDIRECT_HTTPS (.*) HTTPS=$1
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{ENV:HTTPS} !on
RewriteRule .* https://%{REQUEST_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
さくらのレンタルサーバーでは、そのままでは %{HTTPS} や %{HTTP_PORT} によるHTTPS通信の判別が行なえません。
上記の SetEnvIf がポイントで、この記述によって、HTTPS通信を通常の方法で判定できるようにしています。
IfModule mod_rewrite.c 内では、上の SetEnvIf で %{HTTPS} を設定したので、それを元に HTTP → HTTPS の転送をしています。
Simplicityの設定をする
WordPress で Simplicity テーマを利用している場合、テーマのカスタマイズの中に「簡易 SSL 化」という項目が用意されており、簡単に SSL 対応ができます(外観->カスタマイズ->その他)。テーマ側での対応はこれだけです。
以上で完了です。httpsアドレスできちんと表示できるか、httpアドレスでのアクセス時にきちんと転送されるかなどを確認してください。
追記: さくら提供の常時SSL化プラグインを利用する
私は利用していませんが、さくらインターネットから常時SSL化プラグインというWordPressプラグインがリリースされています。こちらを利用すれば、SSL証明書の導入から先の手順を省略し、プラグイン導入だけで済ますことができるかもしれません。
参考:レンタルサーバ 【WordPress】常時SSL化プラグインの使い方 – さくらのサポート情報
追記2: .htaccessとwp-config.phpの編集による方法
.htaccessでhttpをhttpsへ転送する
さくらのレンタルサーバーでは前述のように、%{HTTPS} や %{HTTP_PORT} による切り分けが行なえません。さくら独自仕様の %{X_SAKURA_FORWARDED_FOR} を見る必要があります。X_SAKURA_FORWARDED_FOR は、SSLでの接続が行われた際に接続元の情報が格納されます。
それを踏まえると、.htaccess の https 転送部分は次のようになります。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{X_SAKURA_FORWARDED_FOR} ^$
RewriteRule .* https://%{REQUEST_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
wp-config.phpの編集をする
上記の.htaccessの書き換えのみでは、ブログ内の各記事ページでスタイルシートが適用されずレイアウトが崩れてしまいます。
追加で wp-config.php の書き換えを行う必要があります。
次のコードを wp-config.php の頭の方などへ追加します。
if( isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR']) ) {
$_SERVER['HTTPS'] = 'on';
$_ENV['HTTPS'] = 'on';
}
これで、WordPress にも https アドレスでのアクセスであることが正しく伝わるようになります。