Як змусити маршрути завжди використовувати 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, щоб дізнатися більше).