httpからhttpsにJavaScriptでリダイレクトさせる方法

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に残ってしまいます。つまり、外部サイトから遷移してきた場合に

  1. 外部サイト
  2. http://自分のサイト/
  3. https://自分のサイト/

という履歴が残ります。この状態でブラウザバックを使うと2に戻るため、直後に3にリダイレクトされます。無限ループで1に戻れないのです。

location.replace()ならリダイレクト元をHistoryに記録せず上書きするため、

  1. 外部サイト
  2. https://自分のサイト/

という履歴になります。ブラウザバックで1に戻るため、目的の挙動になります。

location.href.replace(/http:/, ‘https:’)

ディレクトリ構造やクエリ引数を維持するため、「http:をhttps:に書き換える」という方法で行っています。
一番単純な方法は

location.href = 'https://自分のサイト/';

ですが、これではトップページにしか遷移できません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください