Laravel站点部署AWS Elastic Beanstalk后HTTPS重定向JS混合内容问题如何解决?
解决AWS Elastic Beanstalk上Laravel JS资源的混合内容阻止问题
我之前在AWS Elastic Beanstalk上部署Laravel应用时,碰到过和你完全一样的情况——负载均衡已经配置了HTTP强制转HTTPS,主域名、子页面和图片都能正常跳转到HTTPS,唯独用asset()助手加载的JavaScript资源还是走HTTP,触发浏览器的混合内容阻止错误。
问题原因
当Laravel应用部署在AWS负载均衡后面时,后端的Web服务器收到的其实是HTTP请求(HTTPS在负载均衡层面就终止了)。Laravel的asset()助手会根据当前请求的协议生成资源URL,所以默认会输出HTTP链接,哪怕负载均衡已经做了跳转。
修复方法
打开app/Providers/AppServiceProvider.php,在boot()方法中添加以下代码:
if (env('APP_ENV') !== 'local') { URL::forceScheme('https'); }
如果文件顶部还没引入URL门面,记得加上:
use Illuminate\Support\Facades\URL;
这段代码的作用是:在非本地开发环境下,强制Laravel的所有URL生成助手(包括asset())都使用HTTPS协议,这样生成的JS资源链接就都是HTTPS的了,彻底解决混合内容问题。
内容的提问来源于stack exchange,提问作者NiBE
相关产品推荐
相关产品推荐

