如何在本地XAMPP中配置VirtualHost运行Laravel项目
完整XAMPP配置Laravel VirtualHost的可行步骤&排查方案
我帮你整理了一套一步步走的配置流程,以及新手常踩的坑的排查方法,按顺序来应该能搞定你的问题:
一、先确认Apache基础状态
- 打开XAMPP控制面板,确保Apache服务是启动状态。如果启动失败,大概率是80端口被其他程序(比如IIS、迅雷、微信)占用,你可以在XAMPP里修改Apache的端口(比如改成8080),后续所有配置的端口要对应上。
二、配置Apache的虚拟主机文件(http-vhosts.conf)
找到XAMPP安装目录下的apache/conf/extra/http-vhosts.conf,用Atom打开编辑,替换成以下配置(记得修改路径和域名):
# 默认localhost的配置,保留它避免影响其他项目 <VirtualHost *:80> DocumentRoot "C:/xampp/htdocs" ServerName localhost </VirtualHost> # 你的Laravel项目虚拟主机配置 <VirtualHost *:80> # 重点!必须指向Laravel项目的public目录,这是最容易错的点 DocumentRoot "D:/Projects/your-laravel-project/public" # 自定义的本地域名,比如我习惯用laravel.test ServerName laravel.test # 可选:添加www别名 ServerAlias www.laravel.test <Directory "D:/Projects/your-laravel-project/public"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All # 开启重写规则支持 Require all granted </Directory> # 可选:日志配置,方便后续排查错误 ErrorLog "logs/laravel.test-error.log" CustomLog "logs/laravel.test-access.log" common </VirtualHost>
如果之前改了Apache端口为8080,把上面的<VirtualHost *:80>改成<VirtualHost *:8080>。
三、修改系统hosts文件
- Windows:找到
C:\Windows\System32\drivers\etc\hosts,右键Atom选择「以管理员身份运行」打开(不然没权限保存),添加两行:127.0.0.1 laravel.test ::1 laravel.test - macOS/Linux:打开终端,输入
sudo nano /etc/hosts,添加同样的两行,然后按Ctrl+O保存,Ctrl+X退出。
四、重启Apache生效
回到XAMPP控制面板,先停止Apache,再启动它,确保新的配置加载成功。
五、Laravel项目本身的必要检查
就算虚拟主机配置对了,项目本身也要确保没问题:
- 复制项目根目录的
.env.example文件,重命名为.env,配置数据库连接(XAMPP默认MySQL用户名是root,密码为空,如果你设置过密码就填你的):DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=your_database_name # 先在phpMyAdmin里建好这个库 DB_USERNAME=root DB_PASSWORD= - 生成应用密钥:打开XAMPP的「Shell」按钮,cd到你的Laravel项目根目录,运行:
php artisan key:generate - 权限检查(主要针对macOS/Linux):给storage和bootstrap/cache目录加写权限:
Windows一般不需要手动改权限,除非你遇到权限报错。chmod -R 775 storage bootstrap/cache chown -R www-data:www-data storage bootstrap/cache
六、常见问题排查
如果还是访问不了,试试这些:
- 端口问题:如果用了8080端口,访问的时候要加端口号,比如
laravel.test:8080 - 路径错误:检查http-vhosts.conf里的DocumentRoot和Directory路径,Windows路径要用正斜杠
/或者转义的反斜杠\\,别直接写D:\Projects\... - 重写模块没开:打开XAMPP的
apache/conf/httpd.conf,找到LoadModule rewrite_module modules/mod_rewrite.so,确保前面的#被去掉了,然后重启Apache - .htaccess缺失:Laravel的public目录里必须有
.htaccess文件,如果没有,复制下面的内容新建一个:<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # Send Requests To Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule> - 浏览器缓存:用无痕模式访问,或者清除浏览器缓存后再试
内容的提问来源于stack exchange,提问作者Co ti
相关产品推荐
相关产品推荐

