Як змусити маршрути завжди використовувати HTTPS або HTTP
Дата оновлення перекладу 2023-06-22
Як змусити маршрути завжди використовувати HTTPS або HTTP
Іноді вам хочеться убезпечити деякі маршрути і бути впевненими, що вони завжди доступні через HTTPS-протокол. Компонент Routing дозволяє вам посилити схему 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
Компонент Security надає вам інший спосіб примушувати до HTTP
або HTTPS за допомогою налаштування requires_channel
. Цей альтернативний
метод краще пристосований для того, щоб убезпечити "частину" вашого сайту
(всі URL під /admin
) або коли ви хочете убезпечити URL, визначені
у сторонньому пакеті (див. Як форсувати HTTPS або HTTP для різних URL, щоб дізнатися більше).