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