您可以使其与Middleware类一起使用。让我给你个主意。
namespace MyAppHttpMiddleware;use Closure;use IlluminateSupportFacadesApp;class HttpsProtocol { public function handle($request, Closure $next) { if (!$request->secure() && App::environment() === 'production') { return redirect()->secure($request->getRequestUri()); } return $next($request); }}
Kernel.php文件中添加设置规则,如下所示:
protected $middleware = [ 'IlluminateFoundationHttpMiddlewareCheckForMaintenanceMode', 'IlluminatecookieMiddlewareEncryptcookies', 'IlluminatecookieMiddlewareAddQueuedcookiesToResponse', 'IlluminateSessionMiddlewareStartSession', 'IlluminateViewMiddlewareShareErrorsFromSession', // appending custom middleware 'MyAppHttpMiddlewareHttpsProtocol'];
在上述示例中,如果满足以下条件,则中间件会将每个请求重定向到https:
- 当前请求没有安全协议(http)
- 如果您的环境等于
production
。因此,只需根据您的喜好调整设置。
我在具有WildCard SSL的生产环境中使用此代码,并且该代码可以正常工作。如果我
&& App::environment() ==='production'在本地主机中删除并对其进行测试,则重定向也有效。因此,是否安装SSL并不是问题。看来您需要非常注意Cloudflare层才能重定向到Https协议。编辑23/03/2015
感谢
@Adam link的建议:很可能是Cloudflare传递的标头引起的。CloudFlare可能通过HTTP命中了您的服务器,并传递了X-
Forwarded-Proto标头,该标头声明其正在转发HTTPS请求。您需要在中间件中添加另一行,说明…
$request->setTrustedProxies( [ $request->getClientIp() ] );
…信任CloudFlare发送的标头。这将停止重定向循环
编辑27/09/2016-Laravel v5.3只需要将中间件类添加到以下
web组中
kernel.php file:
protected $middlewareGroups = [ 'web' => [ IlluminatecookieMiddlewareAddQueuedcookiesToResponse::class, IlluminateSessionMiddlewareStartSession::class, IlluminateViewMiddlewareShareErrorsFromSession::class, // here MyAppHttpMiddlewareHttpsProtocol::class ],];
编辑23/08/2018-Laravel v5.7请记住,
web默认情况下该组将应用于每个路由,因此您无需web在路由或控制器中进行显式设置。
- 根据环境可以重定向请求
App::environment() === 'production'
。对于以前的版本是env('APP_ENV') === 'production'
。 - 使用
URL::forceScheme('https');
实际上不会重定向。https://
网站建成后,它仅与之建立链接。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)