さくらのレンタルサーバーで、.htaccess を使って http を https へリダイレクトして、www も無しで統一するのイメージ画像

クセの強さに定評のある、さくらのレンタルサーバーで http → https と www 有無のリダイレクトを頑張ってやって、なんとか形になったって言うお話です。

タイトルが長い...!
弊社のサイトをリニューアルしたタイミングで何気にSSL化をしたんですが、http → https はちょっと調べたら見つかったので問題なかったのに、www 付きでアクセスした場合のリダイレクトがうまくいっておらず、しばらく放置してましたがやっと解決したので備忘録兼ねて投稿です。

はじめに

この記事を読んで実際に試して何らかの問題が生じても責任は一切負いません。試される場合は、自己責任でお願いします。

ボク自身、.htaccess はテキトーにググッて最低限の記述をコピペしてくる程度のレベルなので、今回の方法がベストなのか分かりません。
より最適な方法やパフォーマンスが良い方法をご存知でしたら教えて頂けると嬉しいです!

統一したいURLと、おじゃまなURL

アクセスして欲しいURLは、 https で www 無しでした。なので次のような感じです。

  • https://latele.co.jp/

で、アクセスして欲しくないURLとしては次のような感じです。

  • http://latele.co.jp/
  • http://www.latele.co.jp/
  • http://latele.sakura.ne.jp/
  • http://www.latele.sakura.ne.jp/
  • https://www.latele.co.jp/
  • https://latele.sakura.ne.jp/
  • https://www.latele.sakura.ne.jp/

さくらだと、初期ドメインとして latele.sakura.ne.jp が与えられるので、アクセスできるURLがたくさん有って困る感じです。
今回、最後の2つ、https://latele.sakura.ne.jp/ と https://www.latele.sakura.ne.jp/ は解決出来てませんが、さすがにこのアドレスを手打ちする人は居ないと思うので良いかなと。

初期ドメインのアクセスを独自ドメインへ

初期ドメインのリダイレクトに関しては、公式に載ってる方法でうまくいったのですが、最初ドキュメントルート直下ってのに気付いてなくて、その一つ下のディレクトリに設置した .htaccess に記述しててうまく動いてませんでした...

この方法はドキュメントルート(/home/初期ドメイン名/www) 直下に設置した場合のみ機能します。

mod_rewriteを使ったアクセス制御|さくらインターネット公式サポートサイト より引用

実際の記述は次のようにしました。
この .htaccess は前述の通りドキュメントルート直下に設置します。

.htaccess 1
RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?latele\.sakura\.ne\.jp$ [NC]
RewriteRule .* https://latele.co.jp%{REQUEST_URI} [R=301,L]

これで、

  • http://latele.sakura.ne.jp/
  • http://www.latele.sakura.ne.jp/

からのアクセスは無事にリダイレクトされます。

http を https にリダイレクト

次は、せっかくドメイン全体をHTTPS化したので、http のアクセスは強制的に https に飛ばすように変更です。

そのために、先程はドキュメントルート直下に .htaccess を設置しましたが、今度は対象となるドメインのディレクトリ(ドメイン詳細設定画面の 2. マルチドメインの対象のフォルダをご指定くださいに指定してるフォルダ)に .htaccess を設置します。

.htaccess には次のように記述します。

.htaccess 2
RewriteEngine On

RewriteCond %{ENV:HTTPS} !^on$
RewriteCond %{HTTP:X-SAKURA-FORWARDED-FOR} ^$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

うちの場合は、マルチドメインの対象フォルダを /latele と指定してたので .htaccess 分けましたが、ドキュメントルートなら分けなくても良いと思います。

http を https にリダイレクトに関しては、以下の記事を参考にさせて頂きました。

これで、

  • http://latele.co.jp/
  • http://www.latele.co.jp/

からのアクセスは、 https にリダイレクトされます。
しかし、http://www.latele.co.jp/ は、 https://www.latele.co.jp/ にリダイレクトされるので、次は https://latele.co.jp/ にちゃんとリダイレクトするようにします。

www を無しで統一させる

今回一番ハマってたのがこの部分でした。
www を無しで統一させるために「サーバーコントロールパネル」の「ドメイン設定」をいくつか変更する必要が有ります。

ドメイン設定の変更

対象となるドメインの「変更」ボタンをクリックして「ドメイン詳細設定」画面に移動します。

sakura_01.png

移動したら、「1. 設定をお選びください」の「wwwを付与せずマルチドメインとして使用する(上級者向け)」にチェックを付けます。

sakura_02.png

このチェックを付けると、

  • http://www.latele.co.jp/
  • https://www.latele.co.jp/

にアクセス出来なくなってしまいますが、今は問題ありません。

続いて、SSL 証明書の「更新」をクリックして「独自SSLの設定」画面から、秘密鍵のバックアップをします。

sakura_03.png

それと、SSL証明書もバックアップしておきます。
SSL証明書のバックアップに関しては以下のページが参考になります。

そしたらドメイン設定の「新しいドメインの追加」から、www を付けてドメインを追加します。

sakura_04.png

こんな感じで追加されました。指定するフォルダは www 有りが分かりやすければ何でも良いですが、www 無しのフォルダとは別名にします。
www を付けた方のドメイン詳細設定でも「wwwを付与せずマルチドメインとして使用する(上級者向け)」にチェックを付けます。

キャプチャの方では、既にSSLの登録が終わっていますが、www を付与したドメインのSSL 証明書の「登録」をクリックして、SNI SSL を使用する から証明書をインストールします。
で、ここで先ほどバックアップした、秘密鍵とSSL証明書を使って、 www がない方と同じ設定にします。

これで、先ほどアクセスできなくなった

  • http://www.latele.co.jp/
  • https://www.latele.co.jp/

にアクセスできるようになります。
もちろん新規で作ってるので、何のファイルもアップされていない状態のため、 www の有無で表示される内容が全く異なります。

3つ目の .htaccess

いよいよ最後の仕上げです。
www 付きのディレクトリ(うちの場合は /www.latele)用の .htaccess を新しく用意して、次のように記述します。

.htaccess 3
RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?latele\.co\.jp$ [NC]
RewriteRule .* https://latele.co.jp%{REQUEST_URI} [R=301,L]

これを、www 付きのディレクトリにアップして作業は完了!

www 付きのドメインを追加すると言うのは、以下の記事を参考にさせて頂きました。

最後に

最後に、実際にアクセスして欲しくないURLからちゃんとリダイレクトされるかチェックすれば完了です。

リダイレクトの変更をしてもキャッシュされたりするので、シークレットモードとか使ったほうがチェックが確実になると思います。

それにしても、わざわざドメインの追加をしてやったりしないとうまくいかない辺り、さくらのレンタルサーバーの癖の強さは .htaccess 自体殆ど理解してない自分にはツラかったー。
でもなんとか設定できて良かった!