Điều này dành cho Larave 5.2.x và lớn hơn. Nếu bạn muốn có tùy chọn để phân phát một số nội dung qua HTTPS và những nội dung khác qua HTTP thì đây là một giải pháp phù hợp với tôi. Bạn có thể tự hỏi, tại sao ai đó lại muốn chỉ phân phát một số nội dung qua HTTPS? Tại sao không phân phối mọi thứ qua HTTPS?
Mặc dù, việc phân phát toàn bộ trang web qua HTTPS là hoàn toàn ổn, việc cắt đứt mọi thứ qua HTTPS sẽ có thêm chi phí trên máy chủ của bạn. Hãy nhớ rằng tiền mã hóa không hề rẻ. Chi phí nhỏ cũng có tác động đến thời gian phản hồi ứng dụng của bạn. Bạn có thể tranh luận rằng phần cứng hàng hóa rẻ và tác động là không đáng kể nhưng tôi lạc đề :) Tôi không thích ý tưởng phục vụ nội dung tiếp thị trên các trang lớn với hình ảnh, v.v. trên https. Vì vậy, đây là nó đi. Nó tương tự như những gì những người khác đã đề xuất ở trên bằng cách sử dụng phần mềm trung gian nhưng đó là một giải pháp đầy đủ cho phép bạn chuyển đổi qua lại giữa HTTP / HTTPS.
Đầu tiên tạo một phần mềm trung gian.
php artisan make:middleware ForceSSL
Đây là những gì phần mềm trung gian của bạn sẽ trông như thế nào.
<?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);
}
}
Lưu ý rằng tôi không lọc dựa trên môi trường vì tôi đã thiết lập HTTPS cho cả nhà phát triển cục bộ và sản xuất nên không cần thiết.
Thêm phần sau vào routeMiddleware \ App \ Http \ Kernel.php của bạn để bạn có thể chọn và chọn nhóm định tuyến nào sẽ buộc 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,
];
Tiếp theo, tôi muốn bảo mật hai nhóm cơ bản đăng nhập / đăng ký, v.v. và mọi thứ khác đằng sau phần mềm trung gian 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
});
Xác nhận rằng phần mềm trung gian của bạn được áp dụng đúng cách cho các tuyến đường của bạn từ bảng điều khiển.
php artisan route:list
Bây giờ bạn đã bảo mật tất cả các biểu mẫu hoặc khu vực nhạy cảm trong ứng dụng của mình, chìa khóa bây giờ là sử dụng mẫu chế độ xem của bạn để xác định các liên kết bảo mật và công khai (không phải https) của bạn.
Dựa trên ví dụ trên, bạn sẽ hiển thị các liên kết an toàn của mình như sau:
<a href="{{secure_url('/login')}}">Login</a>
<a href="{{secure_url('/signup')}}">SignUp</a>
Các liên kết không an toàn có thể được hiển thị dưới dạng
<a href="{{url('/aboutus',[],false)}}">About US</a></li>
<a href="{{url('/promotion',[],false)}}">Get the deal now!</a></li>
Điều này làm là hiển thị một URL đủ điều kiện, chẳng hạn như https: // yourhost / login và http: // yourhost / aboutus
Nếu bạn không hiển thị URL đủ điều kiện bằng http và sử dụng url liên kết tương đối ('/ aboutus') thì https sẽ vẫn tồn tại sau khi người dùng truy cập trang web an toàn.
Hi vọng điêu nay co ich!