Как заставить 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.
Ответы
Ответ 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