346

HTTP または HTTPS を検出し、JavaScript で HTTPS の使用を強制する方法はありますか?

HTTP または HTTPS を検出するためのコードがいくつかありますが、強制的に使用することはできませんhttps:

window.location.protocolプロパティを使用して、サイトの目的を設定https:し、ページを更新して、ブラウザーにロードされた新しい https 化された URL をリロードします。

if (window.location.protocol != "https:") {
   window.location.protocol = "https:";
   window.location.reload();
}
4

13 に答える 13

568

これを試して

if (location.protocol !== 'https:') {
    location.replace(`https:${location.href.substring(location.protocol.length)}`);
}

location.href = blahこのリダイレクトをブラウザの履歴に追加します。ユーザーが戻るボタンを押すと、同じページにリダイレクトされます。location.replaceこのリダイレクトはブラウザの履歴に追加されないため、使用することをお勧めします。

于 2011-01-18T11:02:54.773 に答える
68

location.protocolを設定すると、新しいURLに移動します。何も解析/スライスする必要はありません。

if (location.protocol !== "https:") {
  location.protocol = "https:";
}

Firefox 49には、機能するが機能しないバグがあります。Firefox54で修正されたと言われています。httpshttps:

于 2012-04-05T21:08:21.600 に答える
25

ユーザーを一時的に https にリダイレクトするだけで、ブラウザはこのリダイレクトを保存しないため、お勧めできません。

Webサーバー(apache、nginxなど)のタスクを記述しますhttp 301, http 302

于 2012-07-07T12:20:09.513 に答える
16

これはどう?

if (window.location.protocol !== 'https:') {
    window.location = 'https://' + window.location.hostname + window.location.pathname + window.location.hash;
}

ただし、サーバー側で行うのが理想的です。

于 2011-01-18T11:03:42.283 に答える
16
if (location.protocol == 'http:')
  location.href = location.href.replace(/^http:/, 'https:')
于 2014-01-10T00:07:32.497 に答える
5

これに答える Javascript の方法ではありませんが、CloudFlare を使用すると、ユーザーをより高速に HTTPS にリダイレクトするページ ルールを作成でき、無料です。CloudFlare のページ ルールでは次のようになります。

ここに画像の説明を入力

于 2016-01-02T07:10:08.970 に答える
-2

こんにちは、このソリューションは完全に機能します。確認する必要はありません。https を使用するだけです。

<script language="javascript" type="text/javascript">
document.location="https:" + window.location.href.substring(window.location.protocol.length, window.location.href.length);
</script>
于 2016-08-06T12:35:30.200 に答える