Подтвердить что ты не робот

Как заставить https для prod, но http для среды dev?

У меня есть приложение symfony2.

На сервере prod я хочу, чтобы все мои маршруты проходили через https, а в dev я хочу иметь возможность использовать http. Как достичь этого с помощью symfony2? Я не хочу касаться конфигурации веб-сервера.

Я попытался добавить это в мой 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 даже в режиме dev.

4b9b3361

Ответ 1

Вы можете определить для этого параметр. В app/config/config.yml define:

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

Измените последние строки 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);

Ответ 3

Мое первое решение работает отлично, но нужно позаботиться о том, чтобы не перезаписывать собственные маршруты в routing_dev.yml. В конце файла у меня был

_main:
    resource: routing.yml

так что весь мой маршрут был изменен на https-схему. Заказ записей, так что моя пользовательская запись на последний раз разрешила проблему.

Ответ 4

Я думаю, вы можете проверить схему в файле app_dev.php и базе, на которой перенаправляют ее на https

$url = parse_url($_SERVER['HTTP_REFERER']);
if ($url['scheme'] == 'http') {
   header("Location: https://{$_SERVER['SERVER_NAME']}{$_SERVER['PHP_SELF']}");
}

Или, возможно, возможно применить некоторые изменения в .htaccess для app_dev.php в URL