これはLarave 5.2.x以降用です。一部のコンテンツをHTTPS経由で提供し、他のコンテンツをHTTP経由で提供するオプションが必要な場合は、ここで私に有効なソリューションを使用できます。なぜ誰かがHTTPS経由で一部のコンテンツのみを提供したいのでしょうか?HTTPSですべてを提供しないのはなぜですか?
HTTPS経由でサイト全体にサービスを提供することはまったく問題ありませんが、HTTPS経由ですべてを切断すると、サーバーで追加のオーバーヘッドが発生します。暗号化は安くはありません。わずかなオーバーヘッドもアプリの応答時間に影響を与えます。一般的なハードウェアは安価であり、影響は無視できると主張できますが、私は余談です:)マーケティングコンテンツの大きなページに画像などをhttps経由で提供するという考えは好きではありません。だからここに行く。これは、ミドルウェアを使用して上記で提案されているものと似ていますが、HTTP / HTTPS間を切り替えられる完全なソリューションです。
最初にミドルウェアを作成します。
php artisan make:middleware ForceSSL
これがミドルウェアの外観です。
<?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);
}
}
ローカル開発と本番環境の両方にHTTPSを設定しているため、必要がないため、環境に基づいてフィルタリングしないことに注意してください。
次のコードをrouteMiddleware \ App \ Http \ Kernel.phpに追加して、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,
];
次に、2つの基本的なグループのログイン/サインアップなど、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
});
ミドルウェアがコンソールから適切にルートに適用されていることを確認します。
php artisan route:list
これで、アプリケーションのすべてのフォームまたは機密領域が保護されました。重要なのは、ビューテンプレートを使用して、安全なパブリック(https以外の)リンクを定義することです。
上記の例に基づいて、安全なリンクを次のようにレンダリングします-
<a href="{{secure_url('/login')}}">Login</a>
<a href="{{secure_url('/signup')}}">SignUp</a>
安全でないリンクは次のようにレンダリングできます
<a href="{{url('/aboutus',[],false)}}">About US</a></li>
<a href="{{url('/promotion',[],false)}}">Get the deal now!</a></li>
これにより、https:// yourhost / login やhttp:// yourhost / aboutusなどの完全修飾URLがレンダリングされます
完全修飾URLをhttpでレンダリングせず、相対リンクurl( '/ aboutus')を使用した場合、ユーザーが安全なサイトにアクセスした後、httpsが持続します。
お役に立てれば!