https 下分頁生成的連結 http 解決方法

hogus2037發表於2019-11-25

首先我們獲取一下當前的網路連線是不是HTTPS

use \Illuminate\Http\Request;
.....
$request->getScheme();
......

跟蹤程式碼我們可以看到 $this->isSecure()

/*
*
 * Gets the request's scheme.
 *
 * @return string
 */
 public function getScheme()
{
  return $this->isSecure() ? 'https' : 'http';
}

繼續跟蹤程式碼 在isSecure()中我們可以得到自己的答案

/*
*
*/
public function isSecure()
{
    //首先去檢查訪問客戶端ip是否在白名單裡 可以通過setTrustedProxies()進行設定
    // 這裡有個坑,isFromTrustedProxy()驗證的是客戶端ip,只能在區域網中使用,如果你需要區域網外使用就不適用
    if ($this->isFromTrustedProxy()
        && $proto = $this->getTrustedValues(self::HEADER_X_FORWARDED_PROTO)) {
        return \in_array(strtolower($proto[0]), ['https', 'on', 'ssl', '1'], true);
    }
    // 取巧的方式就是 我們可以手動去設定變數HTTPS $this->server->set('HTTPS', 'on');
    $https = $this->server->get('HTTPS');

    return !empty($https) && 'off' !== strtolower($https);
}

從結果來看,我這邊使用負載均衡無法通過$this->isFromTrustedProxy() 就意味著我們需要自己去設定全域性屬性
AppServiceProvider

public function boot()
{
    if ($this->app->environment('production')) {
        app(Request::class)->server->set('HTTPS', 'on');
    }
}

這裡只是提供我的解決方法,可能使用有不恰當。
如果有更好的方法,請留言補充

相關文章