如何强制使用https用于生产,但http用于开发环境?

2022-08-30 18:07:23

我有一个symfony2应用程序。

在prod服务器上,我希望我的所有路由都通过https,而在开发中,我希望能够使用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。


答案 1

您可以为此定义参数。定义如下: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),它应该可以正常工作。


答案 2

更改应用.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);

推荐