【问题标题】:Laravel redirect to HTTPS even if i'm already under HTTPS即使我已经在 HTTPS 下,Laravel 也会重定向到 HTTPS
【发布时间】:2020-10-31 11:00:46
【问题描述】:

我有一个中间件可以像这样重定向到 HTTPS:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
class HttpsProtocolMiddleware
{
    public function handle($request, Closure $next)
    {
        if (!$request->secure() && app()->environment('production')) {
            dd("need to redirect");
            return redirect()->secure($request->getRequestUri());
        }

        return $next($request);
    }
}

但是它不起作用,因为如果转到https://project.domain.com,我会从浏览器获得too many redirection(现在使用dd,即使我通过HTTPS 访问我的网站,我也会看到dumo)

编辑:
我已经测试了添加

Request::setTrustedProxies([$request->getClientIp()],Request::HEADER_X_FORWARDED_ALL);

作为第一行,在TrustProxies

protected $proxies = '*';

但没有成功

【问题讨论】:

  • 其他东西可能正在将 (apache/nginx) 重定向到 http (并且 $request->secure() 返回 false)...检查 chrome 开发工具中的实际请求/重定向(网络标签)
  • @RokSprogar 我检查了哪个标题?
  • @RokSprogar 如果你愿意...https://gestionale-marco.herokuapp.com/
  • 你的环境是什么?
  • @James 我已经在 Heroku 上部署了项目

标签: php laravel https middleware


【解决方案1】:

对于你为什么会经历你现在的样子,这并不是一个真正的答案。但是你可以删除那个中间件

并添加

if(app()->environment('production')) {
   \Url::forceSchema('https') 
}

致您的AppServiceProvider.php

会做同样的事情

【讨论】:

  • 这将使用 HTTP 生成 route(...)url(...),但如果用户在 HTTP 页面上,则不会重定向用户
  • 然后将其添加到路由文件的顶部而不是 appServiceProvider
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-08
  • 2011-06-26
  • 1970-01-01
  • 2021-12-02
  • 2015-11-28
  • 2023-03-24
相关资源
最近更新 更多