Многие проекты должны будут выполняться в защищенном http-контексте из-за требований на стороне клиента. В приложении PHP это можно сделать с помощью директив Apache или Nginx, однако многие из нас этого не сделают из-за недостатка знаний или просто потому, что вы ленивы.
Такое перенаправление с http на https также может быть выполнено в вашем приложении. Благодаря тому, как работает Symfony 1.4, это можно сделать глобально, и в течение нескольких секунд вы сможете перенаправить любой URL-адрес вашего проекта в его защищенную версию. В этой статье мы покажем вам, как использовать HTTPS глобально в вашем проекте.
1. Создайте фильтр безопасности
Создать sfSecureFilter.class.php
файл внутри каталога lib вашего приложения, например apps/frontend/lib/sfSecureFilter.class.php
или если вы используете его глобально для всех ваших приложений внутри lib
каталог. Этот файл будет содержать в качестве имени файла, sfSecureFilter
класс, который расширяет sfFilter
Класс Symfony:
getContext();
$request = $context->getRequest();
if (!$request->isSecure())
{
$secure_url = str_replace('http', 'https', $request->getUri());
return $context->getController()->redirect($secure_url);
}
else
{
$filterChain->execute();
}
}
}
Метод execute извлекает контекст и запрос и проверяет, является ли запрос уже защищенным или нет. Согласно протоколу, он будет автоматически изменен на HTTPS, если запрос еще не защищен. Класс сам по себе ничего не делает, если он не присоединен к событию фильтра Symfony, поэтому перейдите к последнему шагу после создания этого файла.
2. Зарегистрируйте фильтр SSL
Теперь, когда у нас есть класс фильтра, который меняет протокол, если он не защищен, нам нужно зарегистрировать его в filters.yml
файл вашего приложения, в частности, в фильтре рендеринга, просто добавив свойство класса с именем нашего ранее созданного класса (sfSecureFilter
):
# apps//config/filters.yml
# You can find more information about this file on the symfony website:
# https://symfony.com/legacy/doc/reference/1_4/en/12-Filters
# Run the sfSecureFilter before starting the rendering process
rendering:
class: sfSecureFilter
# Don't enable 'sfSecureFilter' in the security filter as this is only
# executed when a module is secured by some rule on 'security.yml'
security: ~
cache: ~
execution: ~
После сохранения изменений в filters.yml
очистите кеш вашего проекта php symfony cc
и получить доступ к любому маршруту вашего проекта. Теперь вы будете автоматически перенаправлены на HTTPS-версию.