Да, есть готовые способы через конфиг сервера, но иногда проще и прозрачнее сделать это на уровне Laravel. Middleware ловит каждый запрос и решает: пропускаем его или кидаем на HTTPS.
Шаг 1: Создаём middleware
php artisan make:middleware RedirectToHttps
Laravel создаст app/Http/Middleware/RedirectToHttps.php.
Шаг 2: Реализуем редирект
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class RedirectToHttps
{
public function handle(Request $request, Closure $next)
{
if (!$request->secure() && app()->environment('production')) {
return redirect()->secure($request->getRequestUri());
}
return $next($request);
}
}
Логика проста: если запрос идёт не по HTTPS и мы в продакшне — кидаем редирект. Локально это не мешает.
Шаг 3: Регистрация middleware
Если нужен глобальный редирект для всех маршрутов, добавляем в $middleware в app/Http/Kernel.php:
protected $middleware = [
// ...
\App\Http\Middleware\RedirectToHttps::class,
];
Если нужен только для конкретных маршрутов, добавляем в $routeMiddleware:
protected $routeMiddleware = [
// ...
'https' => \App\Http\Middleware\RedirectToHttps::class,
];
И применяем в маршрутах:
Route::get('/example', 'ExampleController@index')->middleware('https');
Заключение
Вот и всё. Через этот middleware все HTTP-запросы автоматически отправляются на HTTPS. Работает просто, надёжно и без лишнего геморроя с серверными конфигами.
0 комментариев