Как заставить маршруты всегда использовать HTTPS или HTTP
Дата обновления перевода 2023-06-30
Как заставить маршруты всегда использовать HTTPS или HTTP
Иногда вам хочется обезопасить некоторые маршруты и быть уверенными, что они всегда доступны через HTTPS-протокол. Компонент маршрутизации позволяет вам усилить схему URI с помощью схем:
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()
{
// ...
}
}
Конфигурация выше заставляет маршрут 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, определённые
в стороннем пакете (см. Как форсировать HTTPS или HTTP для разных URL, чтобы узнать больше).