web-dev-qa-db-ja.com

製品にはhttpsを、開発環境にはhttpを強制する方法は?

Symfony2アプリケーションがあります。

Prodサーバーでは、すべてのルートをhttps経由で送信し、devサーバーではhttpを使用できるようにします。 symfony2だけでそれを達成するにはどうすればよいですか? Webサーバーの構成には触れたくありません。

これをrouting.ymlに追加してみました

myBundle:
    resource: "@MyBundle/Controller/"
    type:     annotation
    prefix:   /
    schemes:  [https]

私のrouting_dev.ymlにこれを持っている間:

myBundle:
    resource: "@MyBundle/Controller/"
    type:     annotation
    prefix:   /
    schemes:  [http]

_main:
    resource: routing.yml

開発モードでもhttpsに移動したい。

23
k0pernikus

そのためのパラメータを定義できます。 app/config/config.yml定義:

parameters:
    httpProtocol: http

次にapp/config/config_prod.yml

parameters:
    httpProtocol: https

そしてrouting.yml への変更:

myBundle:
    resource: "@MyBundle/Controller/"
    type:     annotation
    prefix:   /
    schemes:  ['%httpProtocol%']

キャッシュ(prodとdevの両方)をクリアすると、機能するはずです。

63
pazulx

App.phpの最後の行を次のように変更します。

if ($request->getScheme() === 'http') {
    $urlRedirect = str_replace($request->getScheme(), 'https', $request->getUri());
    $response = new RedirectResponse($urlRedirect);
} else {
    $response = $kernel->handle($request);
}

$response->send();

$kernel->terminate($request, $response);
2
zioMitch

私の最初の解決策はうまく機能しますが、routing_dev.ymlで自分のルートを上書きしないように注意する必要があります。ファイルの終わりに、私は持っていました

_main:
    resource: routing.yml

そのため、すべてのバンドルルートがhttps-schemeに戻されました。カスタムエントリが最後に来るようにエントリを注文すると、問題が解決しました。

1
k0pernikus