質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

3回答

2634閲覧

さくらのレンタルサーバLite+Laravel5+Let’sEncryptでhttpに強制リダイレクトされる

nnahito

総合スコア2004

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

1グッド

1クリップ

投稿2017/12/26 11:57

編集2017/12/30 09:22

環境

  • さくらのレンタルサーバLiteプラン
  • さくらのレンタルサーバで提供される「Let's Encrypt」
  • Laravel5.5

質問概要

ページ内の相対パスのリンクをクリックすると、
httpsからhttpになってページ遷移する

《例》
https://example.com

<a href="/top/">TOP</a>をクリック

http://example.com/top(https→httpに変わった)

この理由は何故なのでしょうか?
さくらのレンタルサーバに問い合わせたところ、

恐れ入りますが、弊社サーバ側に、自動的にURLを書き換えるような機

能はございません。

という回答をいただきましたので、迷宮入りになってしまいました。。。
自宅で遊びでたてているIISのサーバでは、同じLaravel+Let’sEncryptを使っていても、このような現象は起こりません。

何故このような現象が生じるのでしょうか。
ご存じの方がいらっしゃいましたら、ご教示いただけますと幸いです。

解決方法

AppServiceProvider.phpのbootメソッドを変更

php

1public function boot() { 2 3 // さくらのレンタルサーバで、httpsからhttpに強制リダイレクトされてしまう現象回避用 4 if (isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR'])) { 5 $request = \Request::instance(); 6 $request->server->set('HTTPS', "on"); 7 8 $_SERVER['HTTPS'] = 'on'; 9 $_ENV['HTTPS'] = 'on'; 10 } 11 12 }

bladeのリンクの末尾から「/」を取る。
例:/top//top

kei344👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

さくらサーバのSSLは $_SERVER['HTTPS'] = 'on'; が設定されていないので、$_SERVER[‘HTTP_X_SAKURA_FORWARDED_FOR’] を見て代入する必要があるようです。

【さくらサーバーのSSLでLaravel5を正しく動作させる - アルファブレンド プログラミングチップス】
http://alphabrend.hatenablog.com/entry/2016/06/28/222431

【サクラのレンタルサーバーで共有SSLを使うとHTTPSを認識しない問題 - Qiita】
https://qiita.com/asaokamei/items/dee0ec9c0f00b251d38e

【さくらレンタルのSSLでハマる - technopolistechnopolis】
http://elementa.net/technopolis/wordpress/post-669/

【さくらのレンタルサーバーで常時SSL/TLSを設定する | サイト公開時 | ドキュメント | a-blog cms developer】
https://developer.a-blogcms.jp/document/deploy/sakura-ssl.html

投稿2017/12/28 18:18

kei344

総合スコア69364

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nnahito

2017/12/29 11:32

ご回答ありがとうございます。 いただきました情報をもとに、 AppServiceProvider.phpの中身を以下のように書き換えましたが、 だめなようでした。。。 public function boot() { // さくらのレンタルサーバで、httpsからhttpに強制リダイレクトされてしまう現象回避用 if (isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR'])) { $request = \Request::instance(); $request->server->set('HTTPS', 'on'); } } また、wwwを含むマルチドメインに設定したものを、 wwwを付与せずマルチドメインとして使用する(上級者向け) に変更しましたが、だめなようです……
nnahito

2017/12/30 09:20

無事解決しました! ありがとうございます
kei344

2017/12/30 09:22

解決されたようでよかったです。どのように解決したかコードを回答欄に追記いただけませんか?このページに辿り着いた同じ疑問を持つ人のために、ぜひお願いします。
nnahito

2017/12/30 09:22

すいません、いま追記いたしました!
kei344

2017/12/30 09:25

ありがとうございます!
nnahito

2017/12/30 09:28

こちらこそありがとうございます! おかげさまで解決することができました!! また何かありましたら、お力をお貸しいただけますと幸いです><
guest

0

この理由は何故なのでしょうか?

さくらインターネットのhttps実現方法がどうなっているのか分からなくて、あくまでの可能性を示唆することくらいしか出来ないのですが、リバースプロキシ環境下ではLaravelがhttpsアクセスだと認識できない場合があるみたいです。

例えばroutes/web.phpに以下のようなルーティングを追加して /schema_test にアクセスすると、Laravelがhttpsアクセスと認識しているか確認できると思います。
(認識してるならtrueが、していないならfalseがブラウザに表示される

php

1Route::get('/schema_test', function (\Illuminate\Http\Request $request) { 2 dd($request->secure()); 3});

投稿2017/12/27 09:56

編集2017/12/27 09:58
nazonohito51

総合スコア62

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nnahito

2017/12/28 16:30

ご回答ありがとうございます。 確かにいただきましたコードを実行してみたところ、falseが返ってきました。
nnahito

2017/12/28 16:41

ひとまずhichon様の https://stackoverflow.com/questions/28402726/laravel-5-redirect-to-https の内容をコピペで行ってみましたが、延々とループが続くようで、エラーが返ってきます…… 行ったのは、 namespace MyApp\Http\Middleware; use Closure; class HttpsProtocol { public function handle($request, Closure $next) { if (!$request->secure() && env('APP_ENV') === 'prod') { return redirect()->secure($request->getRequestUri()); } return $next($request); } } のファイルを作成 kernel.phpに App\Http\Middleware\HttpsProtocol:class を追加 です
nazonohito51

2017/12/28 18:04

なるほどなるほど、Herokuなどでも見られるのと同じ問題だと思います。 httpにリダイレクトされる細かい原因はちゃんと調べてないのですが、LaravelのURL生成するようなメソッドは現在認識しているスキームに合わせて生成します。 つまりhttpアクセスされていると認識しているなら、httpなURLを生成します。その影響なのかなと思います。 最近までは上記のHttpsProtocolミドルウェアなどを作って自分たちでなんとか解決していたのですが、公式で対応されたみたいです。 https://readouble.com/laravel/5.5/ja/requests.html こちらのページの「信用するプロキシの設定」の項目がそれになります。 わりと最近追加されたっぽくて、Laravel5.5の比較的後半のバージョンにしかないかもしれません。 v5.5.28にはありましたが、v5.5.21では見つけられませんでした。 僕も使ったことがないのに人に勧めるのはあれですが、以下のような対応になるかと思います。 1. 上記で作ったHttpsProtocolsを外す・削除する 2. app/Http/Middleware/TrustProxies.phpを以下に修正する * protected $proxies = '**';
nnahito

2017/12/29 11:26

ご返信ありがとうございます。 こちら追記してみましたが、だめなようです・・・
guest

0

投稿2017/12/26 13:28

hichon

総合スコア5737

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nnahito

2017/12/27 02:50

ご回答ありがとうございます。 こちら、「Laravel 4.2」の物のようですが大丈夫でしょうか? また、なぜhttps→httpのリダイレクトが発生するのでしょうか……?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問