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:clear
、php artisan view:clear
和php 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 作为资产和动态路由的主要内容,如果未能解决你的问题,请参考以下文章
在 AWS Elastic Beanstalk 中部署后浏览 https 时,Laravel 资产、路由和 url() 不起作用