Creative Commons License
This work is licensed under a
Creative Commons
Attribution-Share Alike 3.0
Unported License.

Master Symfony2 fundamentals

Be trained by SensioLabs experts (2 to 6 day sessions -- French or English).
trainings.sensiolabs.com

Symfony hosting done right

ServerGrove, outstanding support at the right price for your Symfony hosting needs.
servergrove.com

L'audit Qualité par SensioLabs

200 points de contrôle de votre applicatif web.
audit.sensiolabs.com
2.0 version

How to force HTTPS or HTTP for Different URLs

How to force HTTPS or HTTP for Different URLs

You can force areas of your site to use the HTTPS protocol in the security config. This is done through the access_control rules using the requires_channel option. For example, if you want to force all URLs starting with /secure to use HTTPS then you could use the following config:

  • YAML
    access_control:
        - path: ^/secure
          roles: ROLE_ADMIN
          requires_channel: https
    
  • XML
    <access-control>
        <rule path="^/secure" role="ROLE_ADMIN" requires_channel="https" />
    </access-control>
    
  • PHP
    'access_control' => array(
        array('path' => '^/secure',
              'role' => 'ROLE_ADMIN',
              'requires_channel' => 'https'
        ),
    ),
    

The login form itself needs to allow anonymous access otherwise users will be unable to authenticate. To force it to use HTTPS you can still use access_control rules by using the IS_AUTHENTICATED_ANONYMOUSLY role:

  • YAML
    access_control:
        - path: ^/login
          roles: IS_AUTHENTICATED_ANONYMOUSLY
          requires_channel: https
    
  • XML
    <access-control>
        <rule path="^/login"
              role="IS_AUTHENTICATED_ANONYMOUSLY"
              requires_channel="https" />
    </access-control>
    
  • PHP
    'access_control' => array(
        array('path' => '^/login',
              'role' => 'IS_AUTHENTICATED_ANONYMOUSLY',
              'requires_channel' => 'https'
        ),
    ),
    

It is also possible to specify using HTTPS in the routing configuration see How to force routes to always use HTTPS or HTTP for more details.