web-dev-qa-db-ja.com

HTMLコードでURLを変更せずに、HTTPではなくHTTPSですべてのリソースを提供する方法

。htaccessファイルを使用することで、誰でもhttps://にリダイレクトできることを知っています。ただし、すべてのコンテンツがHTTPSで提供されていない場合、SSL証明書に問題があります。

HTMLコードですべてのhttp:// URLをhttps://に変更せずに、HTTPSで提供されるすべてのリソースを変換する方法はありますか?

例:http://domain.comと入力すると、https://domain.comに移動します。ただし、画像は問題を引き起こすHTTPSを使用していません。すべてのリソースでHTTPSを使用する方法はありますか?

私はこれを持っています:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_Host} ^www.domain\.com$ [NC]
RewriteRule ^ https://domain.com%{REQUEST_URI} [L,R=301]

ただし、コンテンツが保護されていないため、私のEV証明書は消えます。そのため、すべての画像もHTTPSで提供する必要があります。

5
Jason

サイト上のすべての画像(およびその他の)リンクから'http:'プレフィックスを削除する必要があります。これを行うと、ブラウザはデフォルトでページのロードに使用されるプロトコルを使用します。たとえば、これが最適です:

<a href="//www.example.com/">

そして、これはそうではありません:

<a href="http://www.example.com/">

一番上の例は完全に有効なマークアップであり、すでに使用している書き換えを使用して、HTTPS接続を介してすべてのリソースをロードします。 HTTPとHTTPSの両方で機能するため、すべてのリンクで使用を開始してください。SSLを有効または無効にしても、この問題は二度とありません。

唯一の考慮事項は、サイトでCDNまたは他のサードパーティがホストするコンテンツを使用している場合です。その場合、上記のアドバイスは、HTTPSを介してリソースを利用可能にした場合にのみ機能します。

これを行うと、EV(拡張検証)証明書が期待どおりに機能し、ページ上のすべてのリソースが安全な接続を介して読み込まれるのが見えるはずです。

10
Tom Brossman

簡単な修正として、すべてのページでContent-Security-Policy: upgrade-insecure-requests;ヘッダーまたは<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">メタタグを送信することで、 WebブラウザーにすべてのHTTP URLをHTTPSとして書き換えるように依頼する を実行できます。

これは永続的なソリューションとしてではなく、すべてのURLをhttpsに変換できるようになるまでの移行ツールとして使用することを目的としています。