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に移動したい。
そのためのパラメータを定義できます。 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の両方)をクリアすると、機能するはずです。
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);
私の最初の解決策はうまく機能しますが、routing_dev.yml
で自分のルートを上書きしないように注意する必要があります。ファイルの終わりに、私は持っていました
_main:
resource: routing.yml
そのため、すべてのバンドルルートがhttps-schemeに戻されました。カスタムエントリが最後に来るようにエントリを注文すると、問題が解決しました。