You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XAMPP配置虚拟主机后Laravel本地资源强制HTTPS加载报404

问题原因

你当前的虚拟主机、hosts配置本身没有语法错误,资源404的核心原因是静态资源链接被自动生成了HTTPS前缀,但你的虚拟主机只配置了80端口的HTTP服务,没有配置443端口HTTPS服务,触发这个自动生成HTTPS链接的常见原因有两个:

  • 你使用的.local是macOS Bonjour(mDNS)服务的保留顶级域名,新版Chrome、Safari浏览器访问.local后缀站点时,会默认将HTTP请求自动升级为HTTPS,和服务端配置无关
  • Laravel的请求组件未正确识别当前访问协议,asset()辅助函数默认会根据当前请求的协议生成资源路径,一旦误判请求为HTTPS,就会生成带https前缀的资源链接,这也是为什么php artisan serve启动内置服务时一切正常——内置服务会正确透传HTTP请求头,不会出现协议误判。
解决方案

按优先级从高到低操作即可:

方案1:更换本地测试域名后缀(推荐)

.test是互联网工程任务组划定的专用于本地测试的保留顶级域,不会触发浏览器自动HTTPS升级,也不会和系统服务冲突:

  1. 修改httpd-vhosts.conf里的ServerName和ServerAlias为abc.test、www.abc.test
  2. 修改系统hosts文件里的解析规则为127.0.0.1 abc.test www.abc.test
  3. 重启XAMPP Apache服务,清除浏览器缓存后用http://abc.test访问即可,不需要改任何项目代码。

方案2:不换域名的情况下修正协议识别

如果不想改域名,按以下步骤调整:

  1. 打开项目下app/Providers/AppServiceProvider.php文件,在boot()方法中添加本地环境强制HTTP生成链接的配置:
    public function boot()
    {
        if (config('app.env') === 'local') {
            \Illuminate\Support\Facades\URL::forceScheme('http');
        }
    }
    
  2. 打开app/Http/Middleware/TrustProxies.php,将$proxies属性修改为如下值,让Laravel正确识别Apache转发的请求头,避免协议误判:
    protected $proxies = '*';
    
  3. 清除浏览器HSTS缓存:Chrome浏览器访问chrome://net-internals/#hsts,在「Delete domain security policies」模块输入abc.local删除对应规则;Safari的话清空对应站点的浏览数据即可。

注意:URL::forceScheme('http')的配置仅建议在本地开发环境添加,不要部署到生产环境。

内容的提问来源于stack exchange,提问作者Urma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 10:24:14