問題
- サイト内ページがHTTP通信で表示されてしまう。*Chromeの場合(「保護されていない通信」の警告が出る。)
- CSSが反映されていない。
環境
- Windows 10
- Google Chrome
- Heroku
- PHP 8.0.0
- laravel 8.16.1
やったこと(3つ)
Herokuを本番環境に設定する
コマンドラインで本番環境に設定。
.envファイルはプッシュされないため、忘れがち?
heroku config:set APP_ENV=production
本番環境でHTTPSを強制する
見出しの通り、HTTPSを強制します。
public function boot()
{
if (\App::environment(['production'])) {
\URL::forceScheme('https');
}
}
HTTPをHTTPSにリダイレクトさせる
ミドルウェアで、HTTPをHTTPSにリダイレクトさせます。
まずは、コマンドラインでミドルウェアを作成します。
php artisan make:middleware ForceHttpToHttps
次に、Middlewareの中身を書いて、
public function handle(Request $request, Closure $next)
{
if (\App::environment(['production']) && $_SERVER["HTTP_X_FORWARDED_PROTO"] != 'https') {
return redirect()->secure($request->getRequestUri());
}
return $next($request);
}
最後に、Kernelに突っ込みます。
protected $middleware = [
\App\Http\Middleware\ForceHttpToHttps::class, // 追加
];
まとめ
上記の方法で、問題が2つとも解決しました。
(CSSが反映された理由は不明です・・・)
- サイト内ページがHTTP通信で表示されてしまう。*Chromeの場合(「保護されていない通信」の警告が出る。)
- CSSが反映されていない。