Documentação do Symfony - versão 3.1
Renderizada do repositório symfony-docs-pt-BR no Github

Como forçar HTTPS ou HTTP para URLs Diferentes

Através da configuração de segurança, você pode forçar que áreas do seu site usem o protocolo HTTPS. Isso é feito através das regras access_control usando a opção requires_channel. Por exemplo, se você quiser forçar que todas as URLs que começam com /secure utilizem HTTPS então você poderia usar a seguinte configuração:

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

O próprio formulário de login precisa permitir acesso anônimo, caso contrário, os usuários não seriam capazes de se autenticar. Para forçá-lo a usar HTTPS você pode ainda usar regras access_control com o papel IS_AUTHENTICATED_ANONYMOUSLY:

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

Também é possível especificar o uso de HTTPS na configuração de roteamento. Veja /cookbook/routing/scheme para mais detalhes.