【Laravel】常時SSL化




LaravelでURLを生成するときはroute()だったりurl()関数だったりを利用して出力することが多いと思いますが、常時SSLにする場合、ちょっとはまったことがありましたので書いておきます。

まず常時SSL化の基本設定ですが、Laravel側で出力するURLはすべてhttpsとする場合、app/Provider/AppServiceProvider.phpに以下の設定をすることで基本的には対応できます。

public function boot(UrlGenerator $url)
{
    $url->forceScheme('https');
}

ここで1点注意点があります。
検索していると常時SSLの情報はぽつぽつと見つかるのですが、forceScheme()ではなく、forceSchema()を使っている記事もあります。
これが何も知らないとややこしいのですが、Laravel5.3まではforceSchema()で、Laravel5.4以降はforceScheme()を使うように変更されています。
これを知らないと古い記事を見て実装したけど動かないということがあるので要注意です。

5.3から5.4.0へのアップグレードの「URL生成」章に記載されています。
https://readouble.com/laravel/5.4/ja/upgrade.html

これでほとんどの場合は対応できるのですが、もう1点URL生成について注意点があります。
それはセッションのurl.intendedを利用している場合です。
リダイレクト前のURLはセッションのurl.intendedに保存されているのですが、リダイレクト先で利用しようとしていたらhttpになってしまうのでここだけ特別な処理が必要になると思います。
もしかしたら設定かパラメーターで何か対策があるのかもしれませんが見つけられませんでした。