Как форсировать HTTPS или HTTP для разных URL¶
Вы можете заставить части вашего сайта использовать HTTPS-протокол в конфигурации
безопасности. Это делается через правила access_control
, используя опцию
requires_channel
. Например, если вы хотите заставить все URL, начинающиеся
с /secure
, использовать HTTPS, то вы можете использовать следующую конфигурацию:
- YAML
1 2 3 4 5 6
# config/packages/security.yaml security: # ... access_control: - { path: ^/secure, roles: ROLE_ADMIN, requires_channel: https }
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14
<!-- config/packages/security.xml --> <?xml version="1.0" encoding="UTF-8"?> <srv:container xmlns="http://symfony.com/schema/dic/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:srv="http://symfony.com/schema/dic/services" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> <config> <!-- ... --> <rule path="^/secure" role="ROLE_ADMIN" requires_channel="https" /> </config> </srv:container>
- PHP
1 2 3 4 5 6 7 8 9 10 11 12
// config/packages/security.php $container->loadFromExtension('security', array( // ... 'access_control' => array( array( 'path' => '^/secure', 'role' => 'ROLE_ADMIN', 'requires_channel' => 'https', ), ), ));
Сама форма входа в систему должна позволять анонимный доступ, иначе пользователи
не смогут аутентифицироваться. Чтобы заставить её использовать HTTPS, вы всё ещё
можете использовать правила access_control
, используя роль IS_AUTHENTICATED_ANONYMOUSLY
:
- YAML
1 2 3 4 5 6
# config/packages/security.yaml security: # ... access_control: - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
<!-- config/packages/security.xml --> <?xml version="1.0" encoding="UTF-8"?> <srv:container xmlns="http://symfony.com/schema/dic/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:srv="http://symfony.com/schema/dic/services" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> <config> <!-- ... --> <rule path="^/login" role="IS_AUTHENTICATED_ANONYMOUSLY" requires_channel="https" /> </config> </srv:container>
- PHP
1 2 3 4 5 6 7 8 9 10 11 12
// config/packages/security.php $container->loadFromExtension('security', array( // ... 'access_control' => array( array( 'path' => '^/login', 'role' => 'IS_AUTHENTICATED_ANONYMOUSLY', 'requires_channel' => 'https', ), ), ));
Также возможно указать использование HTTPS в конфигурации маршрутизации, смотрите /routing/scheme, чтобы узнать больше деталей.
Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.