Dies gilt für Larave 5.2.x und höher. Wenn Sie die Option haben möchten, einige Inhalte über HTTPS und andere über HTTP bereitzustellen, ist hier eine Lösung, die für mich funktioniert hat. Sie fragen sich vielleicht, warum jemand nur einige Inhalte über HTTPS bereitstellen möchte? Warum nicht alles über HTTPS servieren?
Obwohl es völlig in Ordnung ist, die gesamte Site über HTTPS bereitzustellen, hat das Trennen aller Elemente über HTTPS einen zusätzlichen Overhead auf Ihrem Server. Denken Sie daran, Verschlüsselung ist nicht billig. Der geringe Overhead wirkt sich auch auf die Reaktionszeit Ihrer App aus. Man könnte argumentieren, dass Standardhardware billig und die Auswirkungen vernachlässigbar sind, aber ich schweife ab :) Ich mag die Idee nicht, große Inhalte mit Bildern usw. über https zu vermarkten. Also los geht's. Es ähnelt dem, was andere oben vorgeschlagen haben, Middleware zu verwenden, aber es ist eine vollständige Lösung, mit der Sie zwischen HTTP / HTTPS hin und her wechseln können.
Erstellen Sie zuerst eine Middleware.
php artisan make:middleware ForceSSL
So sollte Ihre Middleware aussehen.
<?php
namespace App\Http\Middleware;
use Closure;
class ForceSSL
{
public function handle($request, Closure $next)
{
if (!$request->secure()) {
return redirect()->secure($request->getRequestUri());
}
return $next($request);
}
}
Beachten Sie, dass ich nicht nach Umgebung filtere, da ich HTTPS-Setup sowohl für lokale Entwickler als auch für die Produktion habe, sodass dies nicht erforderlich ist.
Fügen Sie Ihrer routeMiddleware \ App \ Http \ Kernel.php Folgendes hinzu, damit Sie auswählen können, welche Routengruppe SSL erzwingen soll.
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'forceSSL' => \App\Http\Middleware\ForceSSL::class,
];
Als nächstes möchte ich zwei grundlegende Gruppen, Anmelden / Anmelden usw. und alles andere hinter der Auth-Middleware sichern.
Route::group(array('middleware' => 'forceSSL'), function() {
/*user auth*/
Route::get('login', 'AuthController@showLogin');
Route::post('login', 'AuthController@doLogin');
// Password reset routes...
Route::get('password/reset/{token}', 'Auth\PasswordController@getReset');
Route::post('password/reset', 'Auth\PasswordController@postReset');
//other routes like signup etc
});
Route::group(['middleware' => ['auth','forceSSL']], function()
{
Route::get('dashboard', function(){
return view('app.dashboard');
});
Route::get('logout', 'AuthController@doLogout');
//other routes for your application
});
Stellen Sie sicher, dass Ihre Middlewares von der Konsole aus ordnungsgemäß auf Ihre Routen angewendet werden.
php artisan route:list
Nachdem Sie alle Formulare oder vertraulichen Bereiche Ihrer Anwendung gesichert haben, besteht der Schlüssel darin, Ihre Ansichtsvorlage zu verwenden, um Ihre sicheren und öffentlichen (nicht https) Links zu definieren.
Basierend auf dem obigen Beispiel würden Sie Ihre sicheren Links wie folgt rendern:
<a href="{{secure_url('/login')}}">Login</a>
<a href="{{secure_url('/signup')}}">SignUp</a>
Nicht sichere Links können als gerendert werden
<a href="{{url('/aboutus',[],false)}}">About US</a></li>
<a href="{{url('/promotion',[],false)}}">Get the deal now!</a></li>
Dadurch wird eine vollständig qualifizierte URL wie https: // yourhost / login gerendert und http: // yourhost / aboutus gerendert
Wenn Sie keine vollständig qualifizierte URL mit http rendern und eine relative Link-URL ('/ aboutus') verwenden, bleibt https bestehen, nachdem ein Benutzer eine sichere Site besucht hat.
Hoffe das hilft!