web-dev-qa-db-ja.com

httpとhttpsの両方のbase_url?

Httpとhttpsの両方からアクセスできるサイトがあります。 セキュリティレビュー は、base_urlsettings.phpで定義されていないことを報告しています。

ただし、http://example.comとして定義し、すべてのキャッシュをフラッシュすると、httpsのテンプレートがレンダリングされません。

$base_urlsettings.php行をコメント化すると、すべて正常に戻ります。

この問題を解決するにはどうすればよいですか?

7
Godo

おそらく次のようなことをする必要があります:

$protocol = (!empty($_SERVER['HTTPS'])) ? 'https' : 'http';
$base_url = $protocol . '://mysite.com';

... Drupalは、サイトへのアクセス方法に応じて、使用するプロトコルを認識します。

5
colan

私は運が良かった:

$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モジュールは必要ないようですが、有効にしても問題はありません。)

2
kqw

残念ながら、アクセスされたURLに関連してプロトコルを設定することの問題は、サイトがキャッシュファイルの構築時にそれを参照するだけであるため、サイトキャッシュの再構築時に使用されるプロトコルに基づいてファイルとリソースへのすべての参照が作成されることです。

したがって、httpsからキャッシュを再構築すると、すべてのリンクはhttpsになります。 httpからサイトを再構築すると、すべてのリンクはhttpになります。

Httpsからの再構築は最適に機能しますが、ブラウザは引き続き安全なコンテンツをブロックし、ブロックされたコンテンツを手動で許可するようユーザーに要求する場合があります。

0
Michael Myers