LaravelでHerokuデプロイ時、HTTPS通信にならないときに確認すること

Laravel

問題

  1. サイト内ページがHTTP通信で表示されてしまう。*Chromeの場合(「保護されていない通信」の警告が出る。)
  2. 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が反映された理由は不明です・・・)

  1. サイト内ページがHTTP通信で表示されてしまう。*Chromeの場合(「保護されていない通信」の警告が出る。)
  2. CSSが反映されていない。

コメント

タイトルとURLをコピーしました