独自SSLが無料になったのでSSL化させた
ふとしたきっかけで自分のブログをSSL化したら無限ループでハマってしまいました。
今後のためにメモとして残しておきます。
基本的にはこちらの記事が詳しく解説されているので、大変参考になりました。
≫エックスサーバー独自SSLが無料!WordPressサイトをHTTPS化する方法
無限ループでハマる
上記のサイトを参考にほぼできるのですが、2箇所ほど無限ループでハマりました。
wp-config.phpを書き換えないとダメ
こちらの環境では wp-config.php
も変更する必要がありました。
下記の2行を設定して強制的にhttpsにしないと無限ループが発生します。
$_SERVER['HTTPS'] = 'on';
$_ENV['HTTPS'] = 'on';
.htaccessのリライト条件を変更しないとダメ
記事では下記のようになっていますが、こちらの環境では無限ループになりました。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>
修正したものが下記になります。RewriteRuleはそのままでも良かったのですが念の為。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R,L]
</IfModule>
これについては下記の記事が大変参考になりました。
≫AWS常時SSL リダイレクトループしない.htaccessの書き方
・ロードバランサが443へのアクセスを80へのアクセスに変換する
・.htaccess内の RewriteCond ${HTTPS} が永遠に on にならず、リダイレクトの度にRewriteRule が走ってしまう
元々のアクセスが https か http のどちらかが分かれば良いのだが、上記の挙動のせいで、https にリダイレクトしたとしても http からアクセスされたことになり、これが永遠に繰り返されてしまう。
おそらくエックスサーバーでもプランや契約時期によっては上記と似たような環境になっているものがあるのかもしれません。
とりあえず上記の設定で問題無くSSL化ができました。
ちなみにSSL化したブログはこちらです。
台湾旅行に興味ある方はぜひw
≫ちょっと台湾いってきます−台湾旅行ブログ−
追記:2016.07.31
Wordpressの予約投稿が失敗するようになりました……。
wp-cron.php はWordpress自身から呼び出すらしいですが、curl
で試したらエラーになりました。キャッシュ系プラグインは停止しましたし、これくらいしか心当たりがないなぁと。
[***@sv*** public_html]$ curl --head https://go-taiwan.jp/wordpress/wp-cron.php
curl: (35) error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error
結果、サーバーで使用しているPHPが古いだけでした!w
5.5.30 → 5.6.22 にしたらあっさり解決W
追記:2017.02.16
Xserverのサーバー移行キャンペーンで新しいサーバーにしたら再び無限ループが発生しました。
.htaccessのリライトルールを戻したら解消されました。
以前のサーバーは下記のルールでダメでしたが、新サーバーではこちらで正解でした。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>