さくらサーバーにて、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';
}
久々にさくらサーバーさんで構築したので、仕様が全然分かってなかった(´・ω・)