Httpとhttpsの両方からアクセスできるサイトがあります。 セキュリティレビュー は、base_url
がsettings.php
で定義されていないことを報告しています。
ただし、http://example.com
として定義し、すべてのキャッシュをフラッシュすると、httpsのテンプレートがレンダリングされません。
$base_url
のsettings.php
行をコメント化すると、すべて正常に戻ります。
この問題を解決するにはどうすればよいですか?
おそらく次のようなことをする必要があります:
$protocol = (!empty($_SERVER['HTTPS'])) ? 'https' : 'http';
$base_url = $protocol . '://mysite.com';
... Drupalは、サイトへのアクセス方法に応じて、使用するプロトコルを認識します。
私は運が良かった:
$base_url = '//mysite.com';
また、セッションCookieを維持するために、通常は以下を追加します。
$conf['https'] = TRUE;
これにより、混合モードが可能になります。
これは、同じDrupal CloudFlareを介したインストールでいくつかのドメインを使用している私にとってはうまくいきます:
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
$base_url = $_SERVER["HTTP_X_FORWARDED_PROTO"] . '://' . $_SERVER['HTTP_Host'];
} else {
$base_url = 'http://' . $_SERVER['HTTP_Host'];
}
このように、CloudFlareフレキシブルSSLでもうまく機能します。 SSLの有無にかかわらず、サイトにアクセスできます。
(Cloudflareモジュールは必要ないようですが、有効にしても問題はありません。)
残念ながら、アクセスされたURLに関連してプロトコルを設定することの問題は、サイトがキャッシュファイルの構築時にそれを参照するだけであるため、サイトキャッシュの再構築時に使用されるプロトコルに基づいてファイルとリソースへのすべての参照が作成されることです。
したがって、httpsからキャッシュを再構築すると、すべてのリンクはhttpsになります。 httpからサイトを再構築すると、すべてのリンクはhttpになります。
Httpsからの再構築は最適に機能しますが、ブラウザは引き続き安全なコンテンツをブロックし、ブロックされたコンテンツを手動で許可するようユーザーに要求する場合があります。