laravel在xampp下无法运行,主因是apache未正确路由至public目录或关键模块未启用;需确认php≥8.1、启用必要扩展、开启mod_rewrite与allowoverride all、配置虚拟主机指向public、设置storage/bootstrap/cache写权限,并检查error.log定位配置错误。

Laravel 在 XAMPP 下跑不起来,八成不是代码问题,而是 Apache 没把请求正确路由到 public 目录,或者关键模块压根没启用。直接访问 http://localhost/myapp/public 能显示欢迎页?那说明 Laravel 本身装对了,但环境配置还没到位。
检查 PHP 版本和必需扩展是否就绪
Laravel 10+ 明确要求 PHP ≥ 8.1,且必须启用 mbstring、openssl、pdo、tokenizer、xml、ctype、json 这些扩展。XAMPP 7.4 自带 PHP 7.4,已彻底不兼容;XAMPP 8.2(含 PHP 8.2.12)才可用。
- 打开 XAMPP 控制面板 → Shell → 执行
php -v确认版本 ≥ 8.1 - 执行
php -m | findstr /i "mbstring openssl pdo tokenizer xml ctype json"(Windows)或php -m | grep -E "mbstring|openssl|pdo"(Linux/macOS),缺哪个就启哪个 - 编辑
C:\xampp\php\php.ini,取消对应行前的分号,例如把;extension=mbstring改成extension=mbstring - 改完必须重启 Apache,否则无效
Apache 必须启用 mod_rewrite 并允许 .htaccess 覆盖
没开 mod_rewrite 或 AllowOverride All,Laravel 的所有路由都会 404——这不是 Laravel 的错,是 Apache 拒绝读取 .htaccess 里的重写规则。
- 打开
C:\xampp\apache\conf\httpd.conf,确认这行未被注释:LoadModule rewrite_module modules/mod_rewrite.so - 找到
<directory></directory>块(或类似路径),把里面的AllowOverride None改成AllowOverride All - 确保 Laravel 项目根目录下存在默认的
.htaccess文件(Laravel 10+ 自带,别删) - 重启 Apache 后再试,否则改了也白改
用虚拟主机把域名指向 public 目录
硬编码访问 /myapp/public 不仅丑,还会让 route()、asset() 生成错误 URL。必须通过虚拟主机把域名根路径映射到 public 子目录。
- 编辑
C:\xampp\apache\conf\extra\httpd-vhosts.conf,追加:
<virtualhost>
DocumentRoot "C:/xampp/htdocs/myapp/public"
ServerName myapp.test
<directory>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</directory></virtualhost>
- 编辑
C:\Windows\System32\drivers\etc\hosts,加一行:127.0.0.1 myapp.test -
myapp.test是自定义域名,不能用.local或.dev(现代浏览器会强制 HTTPS) - 重启 Apache,然后访问
http://myapp.test—— 这才是正确入口
storage 和 bootstrap/cache 目录权限问题
安装完 Laravel 后,如果页面报 “The stream or file … could not be opened”,基本就是这两个目录没写权限。Windows 下看似“自动有权限”,但实际常因 UAC 或文件属性锁死。
- 进入项目根目录,运行:
chmod -R 777 storage bootstrap/cache(Linux/macOS) - Windows 下右键
storage和bootstrap\cache→ 属性 → 安全 → 编辑 → 给 Users 或 Everyone 添加“完全控制” - 运行
php artisan key:generate生成APP_KEY,否则部分功能(如 session)直接失效 - 确认
.env文件在项目根目录,且保存为 UTF-8 无 BOM 格式(Notepad++ 可设)
最易忽略的一点:改了 httpd.conf 或 httpd-vhosts.conf 后,Apache 重启失败却不报错——它可能静默失败,只在日志里留痕迹。记得看 C:\xampp\apache\logs\error.log,里面通常写着 “Syntax error on line XX” 或 “Cannot load module”。没查日志就瞎猜,90% 的时间都浪费在错误方向上。











