Laravelで常時HTTPSでページ遷移をする方法 | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

※ この記事はLaravel4.2を対象にしています。


Laravelのコントローラからリダイレクトをかけたり、Viewにて特定のURLへリンクしたりということは良くありますが、Laravelは現在の通信の状況をみてアクセス先の URLスキームを決めているようです。

つまり、HTTPで通信していた場合、デフォルトではリダイレクト先やリンク先もHTTPとみなされたりします。

まぁ、これはもちろんオプションが用意されているのでSSLでPOSTやGETするといったことをオプションによって区別させることができます。

例えばBladeの中で、form内の遷移先のURLを指定する際にURL::toメソッドを使う場合に第3引数をtrueとすることでHTTPSのURLを指定することができます。


{{ Form::open(array('url' => URL::to('/path/to/next', array(), true), 'name'=>'formName', 'id'=>'formId')) }}
-snip-
{{ Form::close() }}

実は、URL::toをSSL通信に特化させたければ


URL::secure('/path/to/next', array())

なんてメソッドもあるみたいなんですけど、書き方が統一されていなければ保守性が落ちそうです。

(link_to()ヘルパーをSSLに強制させるlink_to_secure()なんてヘルパーもあるみたいですけど)

ってことで、いまどきのサービスだと全通信をSSL化するみたいなのが当たり前になっていますし、アプリケーション側でオプションをつけるようなやり方をしているとミ スったと気に穴がでそうなので、統一する方法がないかなと調べてたどり着いた答えが下記です。


URL::forceSchema('https');

アプリケーション起動時に呼び出されるstart.phpの設定ファイル上にURL::forceSchema()にてhttpsを指定しています。

これでURL::toやlink_to()などのヘルパー関数も含めてリンク先のスキームがHTTPSとなります。

リンク先がHTTP/HTTPSでばらけるという場合はヘルパーなどは使わずに直接リンクタグとか書いたほうが便利かもしれません。