Chromeが常時SSL化をしていないサイトに対して「保護されていない通信」と出すようになってだいぶ経ちますが、今だSSL化に対応していないサイトは多いです。
実は自分が担当している会社のホームページも常時SSLには対応おらず、利用しているwebサービス会社がやっと対応できることになって設定をしました。
設定自体は難しくなかったのですが、ホームページを見るときにアドレスバーに直接URLを打ち込むなんてことはほとんどなく、ブックマークか検索から見に来る方がほとんどかと思います。なので、http://として接続してくるのですが、それをhttps://にリダイレクトする技があるようなので試してみました。
なお、使っているWebサービスはビッグローブのFeather Cloud。サイト作成機能は使わずに自前で作ってFTPで転送しています。
さて、http://からhttps://にリダイレクトするには、.htaccessというファイルを使って行うのが一般的なようです。で、検索してみると、大体が以下の構文が出てきます。
RewriteEngine on
RewriteCond %{ HTTPS} off
RewriteRule ^(.*)$ https://%{ HTTP_HOST}%{REQUEST_URI} [L,R=301]
これを.htaccess ファイルに書き込み、ルートディレクトリ(トップのindex.htmlと同じ場所)に置いておくとhttp://で接続してきても、https://にリダイレクトしてくれるのです。
が、やってみても以下のエラーが出て表示されなくなります。履歴やCookieを削除しても同じです。
Chromeの場合(このページは動作していません ERR_TOO_MANY_REDIRECTS)
IEの場合(このページを表示できません リダイレクトが多すぎました INET_E _REDIRECT_FAILED)
Chromeのエラーである、ERR_TOO_MANY_REDIRECTS がヒントになります。
何度も何度もリダイレクトしている状態「リダイレクトループ」となっているようです。
ただ、先ほどの構文
RewriteEngine on
RewriteCond %{ HTTPS} off
RewriteRule ^(.*)$ https://%{ HTTP_HOST}%{REQUEST_URI} [L,R=301]
の真ん中2行目の「RewriteCond %{ HTTPS} off」はhttpsだったらオフにする。実行しないはずです。それが効いていないということになります。
あるサーバーではこの書き方だと効かないとも書かれてあったので、2行目を以下に書き直してもみました。
RewriteCond %{ENV:HTTPS} !^on$
しかし、同じエラーが出ます。
もしかしてFeather Cloudは.htaccessはダメなんじゃないかとも思い始めます。
ただ、Feather Cloudのサポートには以下のように書かれています。
ーーーーーー
サイトをSSL化した際は、併せて以下の3点を対応いただくことをお勧めします。
【1】Google Search Consoleなどに設定しているサイトURLを、http://→httpsに変更する。
【2】Canonicalタグ設定のサイトURLを、http://→httpsに変更する。
【3】301リダイレクト設定で、http:// → https://に転送する。
▼301リダイレクトとは
サイトの移設(ドメインの変更)やURLが変更する場合に、変更前のURLから変更後のURLへサイトを転送させ、サイト閲覧者と検索エンジンを誘導する仕組みをいいます。
なお、上記の設定については、弊社でのサポート対象外のため設定方法等の詳細についてはご案内できません
ーーーーーーー
今回行ているのは、【3】の301リダイレクトです。まさに、.htaccessファイルを使ってのリダイレクト方法です。
できるはず。けどご案内できません・・・・って
探しに探してやっと以下のサイトを見つけました。
https://ikuty.com/2016/07/02/aws-htaccess-without-redirectloop/
どうやらAWS等クラウドの環境下でロードバランサが悪さをしているらしい・・・
で、サイトを参考(というかコピーです)に以下のように書き直しました。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{ENV:HTTPS} !^on$
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
結果は・・・・
うまくいきました。
いいんです。結果オーライです。
[10回]
PR