【问题标题】:Laravel not using https for assets and dynamic routesLaravel 不使用 https 作为资产和动态路由
【发布时间】:2018-07-13 09:35:35
【问题描述】:

我已更改我的 APP_URL=https://example.com,我已将其添加到我的 AppServiceProvider 的启动方法中:

/** Enable HTTPS */
if(env('REDIRECT_HTTPS')) {
    $url->forceSchema('https');
}

我已经运行了php artisan cache:clearphp artisan view:clearphp artisan config:clear。我仍然无法获得使用 https 的资产和动态路由。刚刚收到错误:

混合内容:“https://example.com/”处的页面通过 HTTPS 加载,但请求了不安全的样式表“http://example.com/css/app.css”。此请求已被阻止;内容必须通过 HTTPS 提供。

我知道我可以使用secure_asset 而不是asset,这应该可以,但我需要它是动态的,因为我现在仍然需要在另一个域上提供该网站的 http 版本。

【问题讨论】:

    标签: php laravel http https


    【解决方案1】:

    asset() 帮助器依赖于几种可能性来确定是创建 HTTP 还是 HTTPS URL:

    • $_SERVER['HTTPS']on。这是 Apache 的做事方式。对于 nginx,您可以在配置中自行设置该服务器参数。
    • $_SERVER['HTTP_X_FORWARDED_PROTO']https

    如果您在负载均衡器后面,它可能会发送 X-Forwarded-Proto 标头,但 Laravel 默认不信任它,因为在某些情况下它可能由恶意用户设置。你可以使用the TrustedProxy package 告诉 Laravel 信任来自负载均衡器的这个标头。 (编辑:现在是built into Laravel

    参见:Symfony2: getScheme does not return 'https'(Laravel 为此使用 Symfony 的 getScheme() 函数)

    【讨论】:

    【解决方案2】:

    在 .env 文件中,请将本地值更改为生产

    APP_ENV=production
    

    【讨论】:

      猜你喜欢
      • 2021-10-28
      • 2015-10-05
      • 2016-08-14
      • 2017-01-08
      • 1970-01-01
      • 2018-08-15
      • 2018-03-17
      • 2013-03-04
      • 1970-01-01
      相关资源
      最近更新 更多