2016-03-30 9 views
7

Ich habe eine Anwendung auf Laravel 5.2 gemacht. Es lief gut auf HTTP.Umzug von HTTP zu HTTPS auf Laravel hinter CloudFlare

verwendet I asset Funktion vollständige URL zu erzeugen, anstatt relativ jemandes der Verwendung wie

<link rel="stylesheet" type="text/css" href="{{ asset('/css/bootstrap.min.css') }}"> 

Nach Laravel Dokumentation here die asset Verfahren ermittelt automatisch die Anforderungsprotokoll und erzeugt dementsprechend URL.

Nun ist die Anwendung ausgeführt wird, nicht auf HTTPS, ich secure_asset für HTTPS-URLs verwenden kann, aber dann wird es läuft auf HTTP und localhost stoppen.

Ich weiß, es ist etwas, was ich bin fehlt und es kann nicht so schwer sein, nur von HTTP auf HTTPS zu migrieren laravel

PS mit - Cloudflare zum Servieren HTTPS Anfragen verwendet wird.

Antwort

6

Alle bis jetzt gegebenen Antworten sind korrekt, aber keine löste mein Problem.

Das Hauptproblem war meine Anwendung hinter war CloudFlare

Laravel erkennt eine Anfrage als sicher oder unsicher durch einen HTTP-Header das heißt $_SERVER['REQUEST_SCHEME'] Überprüfung der HTTP bleibt auch die Anforderung HTTPS ist aufgrund cloudflare.

CloudFlare setzt einen anderen Header für das gleiche dh $_SERVER['HTTP_X_FORWARDED_PROTO'], die eine Anforderung sicher ist oder nicht

Nach this Artikel und einige Änderungen an dieser ich es geschafft, zu erkennen, überprüft werden müssen erfolgreich HTTPS-URL zu generieren, ohne Änderungen vorzunehmen zum vorherigen Anwendungscode.

+0

Ich glaube, dass das Aktivieren von mod_cloudflare (wenn Sie Apache verwenden) hätte Ihr Problem gelöst, ohne Code zu schreiben. – brazorf

+0

Das hätte es für cloudflare gelöst, aber diese Lösung ist universell für alle Arten von Load Balancer – Cybersupernova

+0

Sorry, ich dachte, die Frage wurde auf Cloudflare konzentriert, wie im Titel angegeben. – brazorf

1

Zugriff auf die Anfrage Um eine Instanz der aktuellen HTTP-Anforderung über Dependency Injection zu erhalten, sollten Sie die Illuminate\Http\Request Klasse auf dem Controller-Konstruktor oder eine Methode https://laravel.com/docs/5.2/requests#request-information

statt der manuellen Einstellung es durch configs typ andeuten konnte man Verwenden Sie Request :: secure() um zu überprüfen, ob die Anfrage über HTTPS

+1

Ich weiß bereits, dass ich das entweder tun kann oder '$ _SERVER ['REQUEST_SCHEME']' direkt verwenden, um zu erkennen, ob die Anfrage sicher ist oder nicht, aber ich sehe nicht, wie es der Asset-Funktion hilft, die korrekte URL – Cybersupernova

1

Gemäß laravel source, Asset wird Protokoll basierend auf Anfrage Info generieren, wenn Sie nicht ausdrücklich darauf hinweisen, http/https zu verwenden. Also sollten Sie hier nichts ändern. Das wird zu https wechseln, sobald Sie es über eine sichere Verbindung anfordern.

+1

zu generieren Soweit ich weiß, ich habe es nicht explizit geändert, aber können Sie mir bitte sagen, wo ich es verifizieren kann – Cybersupernova