Ceci est pour Larave 5.2.x et supérieur. Si vous souhaitez avoir la possibilité de diffuser du contenu via HTTPS et d'autres via HTTP, voici une solution qui a fonctionné pour moi. Vous vous demandez peut-être pourquoi quelqu'un voudrait-il diffuser uniquement du contenu via HTTPS? Pourquoi ne pas tout servir via HTTPS?
Bien qu'il soit tout à fait correct de desservir l'ensemble du site via HTTPS, tout interrompre via HTTPS entraîne une surcharge supplémentaire sur votre serveur. N'oubliez pas que le cryptage n'est pas bon marché. La légère surcharge a également un impact sur le temps de réponse de votre application. Vous pourriez soutenir que le matériel de base est bon marché et que l'impact est négligeable, mais je m'éloigne du sujet :) Je n'aime pas l'idée de proposer du contenu marketing de grandes pages avec des images, etc. Alors voilà. C'est similaire à ce que d'autres ont suggéré ci-dessus en utilisant un middleware, mais c'est une solution complète qui vous permet de basculer entre HTTP / HTTPS.
Créez d'abord un middleware.
php artisan make:middleware ForceSSL
Voici à quoi devrait ressembler votre middleware.
<?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);
}
}
Notez que je ne filtre pas en fonction de l'environnement car j'ai une configuration HTTPS pour le développement local et la production, donc ce n'est pas nécessaire.
Ajoutez ce qui suit à votre routeMiddleware \ App \ Http \ Kernel.php afin de pouvoir choisir le groupe de routage qui doit forcer SSL.
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,
];
Ensuite, je voudrais sécuriser deux groupes de base, connexion / inscription, etc. et tout le reste derrière le middleware Auth.
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
});
Confirmez que vos middlewares sont correctement appliqués à vos routes depuis la console.
php artisan route:list
Maintenant que vous avez sécurisé tous les formulaires ou zones sensibles de votre application, la clé est maintenant d'utiliser votre modèle de vue pour définir vos liens sécurisés et publics (non https).
Sur la base de l'exemple ci-dessus, vous rendriez vos liens sécurisés comme suit -
<a href="{{secure_url('/login')}}">Login</a>
<a href="{{secure_url('/signup')}}">SignUp</a>
Les liens non sécurisés peuvent être rendus comme
<a href="{{url('/aboutus',[],false)}}">About US</a></li>
<a href="{{url('/promotion',[],false)}}">Get the deal now!</a></li>
Cela rend une URL complète telle que https: // yourhost / login et http: // yourhost / aboutus
Si vous ne rendiez pas une URL entièrement qualifiée avec http et que vous utilisiez une URL de lien relative ('/ aboutus'), https persisterait après qu'un utilisateur ait visité un site sécurisé.
J'espère que cela t'aides!