Как заставить маршруты всегда использовать HTTPS или HTTP¶
Иногда вам хочется обезопасить некоторые маршруты и быть уверенными, что они всегда доступны через HTTPS-протокол. Компонент маршрутизации позволяет вам усилить схему URI с помощью схем:
- Annotations
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
// src/Controller/MainController.php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; class MainController extends Controller { /** * @Route("/secure", name="secure", schemes={"https"}) */ public function secure() { // ... } }
- YAML
1 2 3 4 5
# config/routes.yaml secure: path: /secure controller: App\Controller\MainController::secure schemes: [https]
- XML
1 2 3 4 5 6 7 8 9 10 11
<!-- config/routes.xml --> <?xml version="1.0" encoding="UTF-8" ?> <routes xmlns="http://symfony.com/schema/routing" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd"> <route id="secure" path="/secure" schemes="https"> <default key="_controller">App\Controller\MainController::secure</default> </route> </routes>
- PHP
1 2 3 4 5 6 7 8
// config/routes.php use Symfony\Component\Routing\RouteCollection; use Symfony\Component\Routing\Route; $collection = new RouteCollection(); $collection->add('secure', new Route('/secure', array( '_controller' => 'App\Controller\MainController::secure', ), array(), array(), '', array('https')));
Конфигурация выше заставляет маршрут secure
всегда использовать HTTPS.
При генерировании URL secure
, и если текущая схема - HTTP, Symfony
автоматически сгенерирует абсолютный URL c HTTPS как по схеме, даже при
использовании функции path()
:
1 2 3 4 5 6 7 | {# Если текущая схема HTTPS #}
{{ path('secure') }}
{# генерирует относительный URL: /secure #}
{# Если текущая схема HTTP #}
{{ path('secure') }}
{# генерирует абсолютный URL: https://example.com/secure #}
|
Это требование также обязательно для входящих запросов. Если вы попоробуете
получить доступ к пути /secure
с HTTP, вы автоматически будете перенаправлены
на тот же URL, но со схемой HTTPS.
Пример выше использует для схемы https
, но вы также можете заставить URL всегда
использовать http
.
Note
Компонент безопасности предоставляет вам другой способ принуждать к HTTP
или HTTPS с помощью настройки requires_channel
. Этот альтернативный
метод лучше приспособле для того, чтобы обезопасить “часть” вашего сайте
(все URL под /admin
) или когда вы хотите обезопасить URL, определённые
в стороннем пакете (см. How to Force HTTPS or HTTP for different URLs, чтобы узнать больше).
Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.