Laravel 不使用 https 作为资产和动态路由

Posted

技术标签:

【中文标题】Laravel 不使用 https 作为资产和动态路由【英文标题】:Laravel not using https for assets and dynamic routes 【发布时间】: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 版本。

【问题讨论】:

【参考方案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() 函数)

【讨论】:

谢谢!用过这个laravel.com/docs/5.5/requests#configuring-trusted-proxies @RyanBobrowski 哦,天哪,我不知道它被拉到了 L5。【参考方案2】:

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

APP_ENV=production

【讨论】:

以上是关于Laravel 不使用 https 作为资产和动态路由的主要内容,如果未能解决你的问题,请参考以下文章

laravel 资产()方法不返回 https

在 AWS Elastic Beanstalk 中部署后浏览 https 时,Laravel 资产、路由和 url() 不起作用

资产不引用公用文件夹(Laravel)

在 Laravel 中将 Public 添加到资产路径

将资产图像路径作为动态内联样式背景图像 url (Nuxt.js)

工作箱加载错误的动态导入 url