WordPressの常時SSL化で、下層ページのhttpからhttpsへのリダイレクトがうまくいかない場合に確認すること
WordPressの常時SSL化をするとき、リダイレクトの設定でつまづいたので、メモしておきます。
下層ページがhttpsにリダイレクトされない
httpからhttpsへのリダイレクト設定は.htaccessに記述します。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
本来はこの記述で、全てのページがhttpからhttpsへリダイレクトされるようになるはずです。
しかし、サイトを確認してみると、下層ページがリダイレクトされません(トップページはリダイレクトされるが、index.phpをつけるとリダイレクトされない)。
原因はリダイレクト設定を書く位置
どうやらリダイレクト設定の位置が悪かったらしく、# BEGIN WordPress
と書かれた行より上にリダイレクト設定を書かないといけないようです。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
この順番を逆にしてしまうと、先にWordPressの# BEGIN WordPress
から# END WordPress
の処理が適応されて.htaccessが終了してしまいます。
トップページはちゃんとリダイレクトされるので、トップページだけ確認して設定ができたと勘違いしてしまいそうです。
また、こういった後から追加するコードは、下へ下へ追加していくイメージだったので、注意する必要がありますね。
気をつけましょう。