У меня есть приложение 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.
Вы можете определить для этого параметр. В 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-схему. Заказ записей, так что моя пользовательская запись в последний раз разрешила проблему.
Я думаю, вы можете проверить схему в файле 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-адресе