要通过http://localhost:8080访问laravel项目,需先在httpd.conf中添加listen 8080并重启apache,再在httpd-vhosts.conf中配置绑定到public目录、启用allowoverride all和require all granted,同时将.env中的app_url设为http://localhost:8080。

Apache 必须监听额外端口才能用 http://localhost:8080 访问 Laravel
默认 XAMPP 只监听 80 端口,想用 :8080 或其他端口访问 Laravel 项目,第一步不是改虚拟主机,而是让 Apache「听得到」那个端口。否则请求根本进不来,后续所有配置都无效。
打开 C:\xampp\apache\conf\httpd.conf,搜索 Listen 80,在它下方新增一行:Listen 8080(或你需要的任意未被占用端口,如 8000、8001)
保存后重启 Apache。可用 netstat -ano | findstr :8080 验证端口是否已监听。
httpd-vhosts.conf 中的 <virtualhost></virtualhost> 必须完整且路径无尾斜杠
仅改 Listen 不够,虚拟主机定义必须显式绑定到新端口,且 DocumentRoot 必须指向 Laravel 项目的 public 目录——不能是项目根目录,也不能带末尾斜杠。
编辑 C:\xampp\apache\conf\extra\httpd-vhosts.conf,追加:
<virtualhost>
DocumentRoot "C:/xampp/htdocs/myapp/public"
ServerName localhost
<directory>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</directory></virtualhost>
-
ServerName设为localhost即可,无需改hosts文件(因为不依赖域名解析) -
DocumentRoot和<directory></directory>路径必须完全一致,且不能写成"C:/xampp/htdocs/myapp/public/"(尾部斜杠会导致 403) -
AllowOverride All是必须的,否则 Laravel 的.htaccess不生效,所有路由返回 404
多个 Laravel 项目共用不同端口时,AllowOverride All 容易漏配
如果你同时配了 :80、:8080、:8000 三个端口跑三个 Laravel 项目,每个 <virtualhost></virtualhost> 块里的 <directory></directory> 都要单独写一遍 AllowOverride All 和 Require all granted。只在全局 <directory></directory> 里设一次是不够的——虚拟主机会覆盖父级设置。
常见错误现象:
• 某个端口能显示首页但点任何链接都 404
• php artisan serve 能跑,但 Apache 下不行
• .htaccess 明明存在,mod_rewrite 也已启用,就是不重写
检查点:
• 运行 httpd -t 确认配置语法无误
• 查看 Apache 错误日志(C:\xampp\apache\logs\error.log),搜索 AllowOverride 或 access denied
• 确保 LoadModule rewrite_module modules/mod_rewrite.so 在 httpd.conf 中已取消注释
Laravel 的 APP_URL 和生成链接会受端口影响
如果项目里用了 route()、asset() 或邮件中的链接,它们默认按 APP_URL 构建。若你通过 http://localhost:8080 访问,但 .env 里写的是 APP_URL=http://localhost,生成的 URL 就会丢掉 :8080,导致 JS 请求或跳转失败。
解决方法:
• 开发阶段直接在 .env 中设为 APP_URL=http://localhost:8080
• 更稳妥的做法是留空 APP_URL,让 Laravel 自动检测(需确保 Apache 的 mod_headers 已启用,且请求头含 X-Forwarded-Port;本地开发通常不启用该模块,所以手动设更可靠)
• 若用 HTTPS + 自定义端口(如 :8443),还需同步设 APP_URL=https://localhost:8443 并确保 TrustProxies 中间件配置正确
这个细节不会导致项目启动失败,但会让前端 Ajax 请求 404 或资源加载失败,排查起来容易绕远路。











