WordPress
SSL
.htaccess
さくらサーバー

さくらサーバーのWordPressを常時SSLにしたときの備忘録

さくらサーバーにて、SSL化した際にリダイレクト処理でwww有りにさせたくて悩んだので、その覚書です。

WordPress側では、「さくらのレンタルサーバ 簡単SSL化プラグイン」でSSL化は済みますが、リダイレクト処理がどっちでも使えるものなので、ここは書き直す必要がある。

プラグインを有効化して、設定が済んださいの.htaccessです。

.htaccess
# BEGIN Force SSL for SAKURA
# RewriteしてもHTTPS環境変数を有効にする
SetEnvIf REDIRECT_HTTPS (.*) HTTPS=$1

# 常時HTTPS化(HTTPSが無効な場合リダイレクト)
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{ENV:HTTPS} !on
RewriteCond %{REQUEST_URI} !/wp-cron\.php$
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
# END Force SSL for SAKURA

変更した.htaccess

.htaccess
# BEGIN Force SSL for SAKURA
# RewriteしてもHTTPS環境変数を有効にする
SetEnvIf REDIRECT_HTTPS (.*) HTTPS=$1

# 常時HTTPS化(HTTPSが無効な場合リダイレクト)
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{ENV:HTTPS} !on
RewriteCond %{REQUEST_URI} !/wp-cron\.php$
RewriteCond %{HTTP:X-SAKURA-FORWARDED-FOR} ^$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

# wwwが付いてなかったら、wwwを付けるようにする
RewriteCond %{ENV:HTTPS} on
RewriteCond %{REQUEST_URI} !/wp-cron\.php$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP:X-SAKURA-FORWARDED-FOR} ^$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]
</IfModule>
# END Force SSL for SAKURA

HTTPSがONの時にリダイレクトがかからなかったので、ONの状態のルールを複製した。
あと、RewriteCond %{HTTP:X-SAKURA-FORWARDED-FOR} ^$これもちゃんと追加する。これないとリダイレクトループが発生します。

.htaccessを編集したあと、今度はwp-config.phpファイルにサーバー変数を書く必要があるので、それも追加する。

wp-config.phpの編集

wp-config.php
if (isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR']))
{
    $_SERVER['HTTPS']       = 'on';
    $_SERVER['HTTP_HOST']   = 'www.example.com';
    $_SERVER['SERVER_NAME'] = 'www.example.com';
    $_ENV['HTTPS']          = 'on';
    $_ENV['HTTP_HOST']      = 'www.example.com';
    $_ENV['SERVER_NAME']    = 'www.example.com';
}

久々にさくらサーバーさんで構築したので、仕様が全然分かってなかった(´・ω・)