Это для 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>
Это отображает полный URL-адрес, такой как https: // yourhost / login и http: // yourhost / aboutus.
Если вы не отображали полностью определенный URL-адрес с http и использовали относительный URL-адрес ссылки ('/ aboutus'), тогда https будет сохраняться после посещения пользователем защищенного сайта.
Надеюсь это поможет!