エックスサーバーの常時SSL化の落とし穴と確実に設定する方法
エックスサーバーでは、ドメイン設定からワンクリックで常時SSL化が行えるようになっています。
しかし、この設定方法ではリダイレクトがうまく動作しないことがあるので、その注意点と手動でリダイレクト設定を行う方法を記載しておきます。
ドメイン設定からHTTPS転送する場合
サーバーパネルの「ドメイン」>「ドメイン設定」から対象のドメインの「HTTPS転送」にチェックを入れると、自動で.htaccessにルールを追加してくれます。

しかし、この方法では先頭に追加すべきリダイレクトルールが.htaccessの最後に追加されてしまいます。
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
SetEnvIf Request_URI ".*" Ngx_Cache_NoCacheMode=off
SetEnvIf Request_URI ".*" Ngx_Cache_AllCacheMode
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]この順番では、WordPressのリライトルールが先に処理されるため、HTTPSリダイレクトが実行されないケースがあります。
実際にhttpでアクセスしたところ、下層ページでリダイレクトされないことが多々ありました。
※設定が反映されない場合があるため、先頭へ追記する事を推奨しております。
https://www.xserver.ne.jp/manual/man_server_fullssl.php
説明と少し矛盾しています。
結論:「.htaccess」ファイルで常時SSL化を行う
以下のコードを、.htaccessファイルの一番先頭に記述します。
RewriteEngine On
RewriteCond %{HTTPS} !on [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]記述すると以下のようになります。
RewriteEngine On
RewriteCond %{HTTPS} !on [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
SetEnvIf Request_URI ".*" Ngx_Cache_NoCacheMode=off
SetEnvIf Request_URI ".*" Ngx_Cache_AllCacheMode
この方法は、エックスサーバー公式「Webサイトの常時SSL化」の内容と同じですが、一部コードに[NC]を付け足しています。
#公式のコード
RewriteCond %{HTTPS} !on
#[NC]を追加
RewriteCond %{HTTPS} !on [NC]なぜ[NC]が必要か
[NC] は、HTTPSリダイレクトの動作自体に必要なものではありません。
[NC] は No Case(大文字・小文字を区別しない)の略です。
しかし、エックスサーバーの場合、ドメイン設定から「HTTPS転送」のON/OFFを切り替えると、.htaccess内のリダイレクトルールを自動で検索・更新します。
もし、後から誤ってドメイン設定でHTTPS転送を変更してしまった場合、手動で追加したルールが意図せず後ろへ書き直されてしまいます。
それを防ぐため、検索対象と一致しないように[NC]を追加しました。
これで、手動で追加したルールの上書きを防ぐことができます。
動作チェックは必須
設定が簡単になったからといって実際の動作チェックを怠るべきではありません。
今回のように、一見正しく設定できているように見えても、特定のページで意図した動作にならないケースは珍しくありません。
仕様の違いや環境差、さらにはバグが存在することもあるため、「設定したから大丈夫」と思い込まず、実際にトップページや下層ページ、管理画面などを一通り確認することが大切です。
なお、こちらの件はエックスサーバーに報告済みです。(何かあれば追記します。)

カスタマイズに困ったらお気軽にご相談を!
- 「ちょっとしたCSSの調整だけお願いしたい」
- 「不具合を直してほしい」
料金は3,000円〜、お支払いは銀行振込・Amazonギフトカードなど柔軟に対応してます🤔
お気軽にコメントどうぞ