webサーバに手出しできない、かつ、httpとhttpsで出し分けができない場合にhttpからhttpsにリダイレクトする方法です。
webサーバもmetaタグも使えないので、JavaScriptを使います。
コード
<script type="text/javascript">
if(location.protocol == 'http:') {
location.replace(location.href.replace(/http:/, 'https:'));
}
</script>
ポイント
location.replace()を使う
JavaScriptのリダイレクトをググるとlocation.hrefを使う方法が出てきますが、この方法ではブラウザのHistoryに残ってしまいます。つまり、外部サイトから遷移してきた場合に
- 外部サイト
- http://自分のサイト/
- https://自分のサイト/
という履歴が残ります。この状態でブラウザバックを使うと2に戻るため、直後に3にリダイレクトされます。無限ループで1に戻れないのです。
location.replace()ならリダイレクト元をHistoryに記録せず上書きするため、
- 外部サイト
- https://自分のサイト/
という履歴になります。ブラウザバックで1に戻るため、目的の挙動になります。
location.href.replace(/http:/, ‘https:’)
ディレクトリ構造やクエリ引数を維持するため、「http:をhttps:に書き換える」という方法で行っています。
一番単純な方法は
location.href = 'https://自分のサイト/';
ですが、これではトップページにしか遷移できません。
最近のコメント