【Laravel5.8】リンクがhttpsにならず送信フォームが「安全な送信先ではない」と言われてしまう

送信フォームのaction部分をこんな感じで設定しています。



テンプレート

<form
   action="{{ action('ApplicationController@store') }}"
   method="post">
...
</form>

コントローラ

class ApplicationController extends Controller
{
   public function store(Request $request)
   {
...
...
       return redirect('https://hoge.com/form/');
   }
}



action部分には、store()で設定している「https://hoge.com/form/」に相当するURIが入力されるはずなんですが、いざフォームを表示してみるとこんな感じになっています。


表示されるHTML

<form
   action="http://hoge.com/form/"
   method="post">
...
</form>


ページ自体は「https://hoge.com/form/」である一方、フォームの送信先が「http://hoge.com/form/」となっておりhttpsにならないので、Chromeに「安全ではない」と怒られてしまいます。毎回そうというわけではないんですが、なぜか時々これ起きるんですよね。なぜなのか。他でも同じように書いているはずなんですけど。



解決策:常にhttpsを使うようにしましょう

AWSで設定してすべてのサイトがhttps化されているので、すべてhttpsで問題ありません。またプロキシの設定では解決しませんでした。というわけで、AppServiceProvider.phpに以下を記述します。

laravel/app/Providers/AppServiceProvider.php

class AppServiceProvider extends ServiceProvider
{
...
...
   public function boot()
   {
       \URL::forceScheme('https');
   }
}


これで生成されるURLが全部httpsになります。

自分の開発環境ではローカルでの開発時にはhttp接続しているので、本番環境でだけこの設定を使うようにしておきます。


class AppServiceProvider extends ServiceProvider
{
...
...
   public function boot()
   {
       if(env('APP_ENV') === 'production') {
           \URL::forceScheme('https');
       }
   }
}