Question

I have a symfony2 application.

On the prod server I want all my routes to go via https, while in dev I want to be able to use http. How do I achieve that with symfony2 alone? I do not want to touch the webserver configuration.

I tried adding this in my routing.yml

myBundle:
    resource: "@MyBundle/Controller/"
    type:     annotation
    prefix:   /
    schemes:  [https]

while having this in my routing_dev.yml:

myBundle:
    resource: "@MyBundle/Controller/"
    type:     annotation
    prefix:   /
    schemes:  [http]

_main:
    resource: routing.yml

It still wants to go to https even in dev mode.

Was it helpful?

Solution

You can define parameter for that. In app/config/config.yml define:

parameters:
    httpProtocol: http

Then in app/config/config_prod.yml:

parameters:
    httpProtocol: https

And in routing.yml change to:

myBundle:
    resource: "@MyBundle/Controller/"
    type:     annotation
    prefix:   /
    schemes:  ['%httpProtocol%']

Clear the cache (both prod and dev) and it should work.

OTHER TIPS

Change your app.php last lines like this:

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);

My first solution works fine, yet one should take care to not overwrite one own's routes in the routing_dev.yml. At the end of the file, I had

_main:
    resource: routing.yml

so all my bundle route was changed back to the https-scheme. Ordering the entries, so that my custom entry comes last resolved the issue.

I think you can check the scheme in app_dev.php file and base on that redirect it to https

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

Or maybe able to apply some changes in .htaccess for app_dev.php in URL

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top