2017-05-16 3 views
1

Ich habe ein Laravel 5.2-Projekt. Vor kurzem habe ich ein SSL-Zertifikat auf meiner Website installiert, also wenn ich https://example.com in den Browser tippe, funktioniert es, aber wenn ich example.com schreibe, verbindet es sich durch HTTP.Umleiten von http zu https in Laravel 5.2

dass zu beheben, habe ich diese Zeilen in meine .htaccess Datei:

RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

Danach, wenn ich example.com geben, leitet der Browser mich https://example.com. Das ist perfekt.

Das Problem ist, wenn ich versuche, auf die URL http://example.com/download/get/book/volume2 zuzugreifen, leitet es mich nicht zu HTTPS. Es leitet mich auf die Indexseite um. Wenn ich die s von https in der URL hinzufügen, funktioniert es gut, aber ich brauche die App, um mich von HTTP zu HTTPS umzuleiten.

Die Route in Routen-Datei:

Route::get('download/get/book/{book}' 

Dieser Weg öffnet eine PDF-Datei, die ich in privates/storage Ordner in den Browser-Tab haben.

EDIT:

Meine .htaccess-Datei:

<IfModule mod_rewrite.c> 
<IfModule mod_negotiation.c> 
    Options -MultiViews 
</IfModule> 

RewriteEngine On 

# Redirect Trailing Slashes If Not A Folder... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

# Handle Front Controller... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [L] 

# Handle Authorization Header 
RewriteCond %{HTTP:Authorization} . 
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

# require SSL 
RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

+0

Haben Sie andere '. Htaccess 'Dateien in einem dieser" Unterverzeichnisse "? (Sind das physische Unterverzeichnisse?) – MrWhite

+0

Nein, ich habe einen "public_html" Ordner, wo ist meine .htaccess und ein "privates" Ordner, wo ich alle Ansichten, Controller, etc. habe –

+0

In diesem Fall, wo in Ihrem '.htaccess' Datei haben Sie diese Direktiven hinzugefügt? Bitte fügen Sie den Inhalt Ihrer '.htaccess' Datei Ihrer Frage bei. – MrWhite

Antwort

2

Ihre HTTP auf HTTPS Bedürfnisse umleiten in der Nähe der Spitze Ihrer .htaccess Datei gehen, unmittelbar nach der RewriteEngine Richtlinie und, was wichtig ist , vor der Laravel Front Controller.

Als allgemeine Regel gilt, externe Umleitungen sollte vor internen umschreibt gehen immer.

Der Front-Controller fängt alle Anfragen (oder besser gesagt Anforderungen, die an eine physische Datei oder das Verzeichnis nicht Karte) und schreibt diese index.php (das schließlich übernimmt die routeing). Das Problem besteht darin, dass die HTTP-zu-HTTPS-Umleitung später stattfindet und die jetzt umgeschriebene URL in eine externe Umleitung zu index.php konvertiert.

Ebenso sollte Ihr # Handle Authorization Header Block auch vor dem Frontcontroller (ideal) gehen. (Es funktioniert in seinem aktuellen Zustand, in pro Verzeichnis .htaccess Dateien, aufgrund der Schleifen Natur von .htaccess Dateien, aber wenn Sie diese Anweisungen auf die Server-Konfiguration verschoben würde es fehlschlagen.)

+0

Danke für Ihre Antwort. Ich habe die Änderungen gemacht, die Sie gesagt haben, aber es funktioniert immer noch nicht. –

+0

Stellen Sie sicher, dass Sie vor dem Testen den Browser-Cache leeren. Die früheren (fehlerhaften) 301s wurden vom Browser zwischengespeichert. (Aus diesem Grund ist es oft besser, mit 302s zu testen - um den Cache zu vermeiden.) – MrWhite

+1

Es funktioniert !!!! Vielen Dank!!! –

Verwandte Themen