如何强制Laravel框架全站使用HTTPS协议?
你已经搞定了静态资源和表单的HTTPS适配,但Laravel分页生成的URL还在走HTTP,这确实是个容易踩的小坑。下面给你几个逐步排查解决的方案:
一、全局强制Laravel生成HTTPS URL
这是最根本的解决思路,能让所有框架生成的URL(包括分页、路由、asset资源等)默认走HTTPS:
修正.env配置
打开项目根目录的.env文件,把APP_URL改成你的HTTPS域名:APP_URL=https://your-domain.com修改完记得执行
php artisan config:cache清空配置缓存,确保新配置生效。在服务提供者中强制协议
打开app/Providers/AppServiceProvider.php,在boot方法里添加强制HTTPS的逻辑:use Illuminate\Support\Facades\URL; public function boot() { // 仅在生产环境强制HTTPS,本地开发可以保留HTTP if (config('app.env') === 'production') { URL::forceScheme('https'); } }这样不管请求的原始协议是什么,Laravel生成的所有URL都会自动用HTTPS。
适配负载均衡/反向代理场景
如果你的站点部署在Nginx、Apache或者云服务商的负载均衡后面,Laravel可能识别不到真实的客户端请求协议(因为代理转发给后端的是HTTP请求)。这时需要配置TrustProxies中间件:
打开app/Http/Middleware/TrustProxies.php,更新代理信任配置:protected $proxies = '*'; // 也可以指定具体的代理IP,更安全 protected $headers = Request::HEADER_X_FORWARDED_ALL;配置后Laravel就能正确识别客户端发起的是HTTPS请求,生成对应协议的URL。
二、针对分页实例单独强制HTTPS
如果全局设置后分页URL还是有问题,可以直接在分页代码里强制指定协议:
修改你的分页输出代码,在appends之后调用setScheme方法:
{!! $plugins->appends(['tag' => $param2, 'search' => $param1])->setScheme('https')->links() !!}
这个方法会直接让当前分页实例生成的所有链接都使用HTTPS协议。
三、检查jscroll的配置逻辑
最后确认jscroll是否正确读取了Laravel生成的分页链接。通常jscroll会自动获取分页按钮的href属性,只要Laravel生成的链接是HTTPS的,它就会正常发起HTTPS请求。如果jscroll是手动拼接URL的,记得把拼接的地址改成HTTPS格式。
按上面的步骤试一遍,应该就能解决分页的HTTP跳转问题了。
内容的提问来源于stack exchange,提问作者Avi

