이것은 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,
];
다음으로, 두 개의 기본 그룹 로그인 / 가입 등과 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을 렌더링하는 것입니다 .
http로 정규화 된 URL을 렌더링하지 않고 상대 링크 url ( '/ aboutus')을 사용하는 경우 사용자가 보안 사이트를 방문한 후에도 https가 유지됩니다.
도움이 되었기를 바랍니다!