サブドメインで運用しているWebサイトを常時SSL化したので .htaccess にリダイレクト用コードを書いたのですが、https のサイトに飛ばず http( s 無し旧サイト)が表示されます。
検索しても解決策が見つからず途方に暮れましたが、試行錯誤の結果 https版サイトへのリダイレクトに成功。その時おこなった.htaccess 設定について記録しています。
記事の概要と注意点
- 常時SSL化の解説はありません
- XSERVER環境での対処法です
- 一般的な設定でうまくいかない場合の対処法です。まずは通常のやり方を試して下さい
- 当ページを参考にして問題が発生しても一切の責任を負いかねますのでご了承ください
普通のやり方
リダイレクトの一般的な設定方法。エックスサーバー環境でのやり方です。
http://example.com にアクセスが来たら、常時SSL済みの
https://example.com にリダイレクトします。
まずは、サーバーにFTPでログイン。
<ルート>/ドメイン名(example.com)/public_html/
にある .htaccess の先頭に以下のコードを書き込みます。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
なお、引用元サイトではワードプレスSSL化の方法が非常に丁寧に説明されています。
何故かうまくいかない
上のやり方でhttpsサイトへのリダイレクトを試みたのですが、サブドメインではうまく行きませんでした。メインのドメインでは問題なく転送されるのですが。
サブドメイン(sub.example.com)だから別の設定が必要かなと思って検索してみましたが、通常なら上のコードを書くだけで行けるみたいです。
自分の環境のせいだと思いますが、どうして良いか分からず困ってしまいました。何かヒントがないかとXSERVERマニュアルのサブドメイン設定ページを見てみると…
なんとサブドメインフォルダにも .htaccess が設置できるようではないですか!
ダメ元でそちらのファイルを編集することにしました。
サブドメインフォルダの.htaccessを編集
サブドメインフォルダの.htaccess を編集します。
具体的な場所は、
<ルート>/ドメイン名(example.com)/public_html/サブドメイン名(sub)/
FTPで見てみると既に .htaccess が設置されていました。ワードプレスをインストールした際に生成されたようです(FTPソフトの設定によっては隠しファイルの .htaccess が表示されない場合もあるので注意)。
サブドメイン名のフォルダにある .htaccess に、上のリダイレクト用コードを書き込むと、サブドメインもちゃんとhttpsへリダイレクトされるようになりました。一件落着です。
あとがき
筆者のエックスサーバー環境ではこのやり方で解決できました。
<ルート>/ドメイン名(example.com)/public_html/
の .htaccess を編集してもサブドメインのリダイレクトがうまくいかない時には試してみる価値アリです。
ただし、エックスサーバー以外ではどうか分かりませんし、同サーバーでも環境が異なると失敗するかもしれません。
調べた所、上位ディレクトリの .htaccess 設定は下位ディレクトリにも有効らしいです。つまり本来なら public_html/ の .htaccess を編集するだけで、サブドメインフォルダ内の .htaccess にも効力が及ぶはずなのですけどね。
サーバー側の障害で設定が反映されないこともあるらしいですが、障害情報は出ていません。
サーバーについて詳しくないので根本的な原因が分からず、謎は残ったままです。
当記事を参考にされる場合は自己責任でお願いします。