在本地开发环境中管理多个项目时,使用 localhost/project-name 的方式虽然可行,但随着项目数量的增加,这种方式会变得混乱且难以管理,WAMP(Windows、Apache、MySQL、PHP)环境提供了一个更优雅、更专业的解决方案:配置多个虚拟主机,通过配置,你可以为每个项目分配一个独立的本地域名(如 myapp.dev 或 blog.local),使其模拟真实的线上服务器环境,极大地提升了开发效率和便利性,本文将详细介绍如何在WAMP中配置多个虚拟主机,涵盖从准备工作到故障排查的全过程。

核心原理:两个关键文件
配置虚拟主机的核心在于修改两个关键文件,让它们协同工作:
- Apache虚拟主机配置文件 (
httpd-vhosts.conf):这个文件负责告诉Apache服务器,当收到针对特定域名的请求时,应该从哪个目录提供网站文件。 - Windows系统hosts文件:这个文件位于操作系统中,负责将域名(如 
myapp.dev)解析到指定的IP地址,在本地开发中,我们通常将自定义域名指向本机IP地址0.0.1。 
当你在浏览器中输入 myapp.dev 时,整个请求流程如下:
浏览器 -> 查询Windows hosts文件 -> 得知myapp.dev指向127.0.0.1 -> 请求发送至本地Apache服务器 -> Apache查询httpd-vhosts.conf -> 得知myapp.dev对应C:/wamp64/www/myapp目录 -> Apache返回该目录下的index.php文件。
第一步:启用虚拟主机模块
在开始配置之前,必须确保Apache已经加载了虚拟主机配置文件,默认情况下,该功能可能是被注释掉的。
- 左键单击WAMP任务栏图标,导航至 
Apache->httpd.conf。 - 这会打开Apache的主配置文件,使用文本编辑器(如Notepad++或VS Code)的搜索功能(Ctrl + F),查找以下这行代码:
#Include conf/extra/httpd-vhosts.conf
 - 删除行首的  符号,将其解除注释,修改后的代码应如下所示:
Include conf/extra/httpd-vhosts.conf
 - 保存并关闭 
httpd.conf文件,这一步告诉Apache在启动时,需要加载conf/extra/目录下的httpd-vhosts.conf文件。 
第二步:配置虚拟主机文件
我们来编辑核心的虚拟主机配置文件。
- 
再次左键单击WAMP图标,导航至
Apache->httpd-vhosts.conf。 - 
这个文件通常包含一些示例代码,建议将
<VirtualHost>标签内的示例内容全部删除或注释掉,以避免冲突。
 - 
假设你有两个项目,分别存放在
C:/wamp64/www/project-a和C:/wamp64/www/project-b,我们为它们分别配置虚拟主机,为了确保localhost依然可用,我们也需要为它添加一个配置。在文件中添加以下内容:
# 默认的 localhost 配置,确保其可用 <VirtualHost *:80> ServerName localhost DocumentRoot "C:/wamp64/www" <Directory "C:/wamp64/www/"> Options +Indexes +Includes +FollowSymLinks +MultiViews AllowOverride All Require local </Directory> </VirtualHost> # 项目 A 的虚拟主机配置 <VirtualHost *:80> ServerName project-a.local DocumentRoot "C:/wamp64/www/project-a" <Directory "C:/wamp64/www/project-a/"> Options +Indexes +Includes +FollowSymLinks +MultiViews AllowOverride All Require all granted </Directory> </VirtualHost> # 项目 B 的虚拟主机配置 <VirtualHost *:80> ServerName project-b.local DocumentRoot "C:/wamp64/www/project-b" <Directory "C:/wamp64/www/project-b/"> Options +Indexes +Includes +FollowSymLinks +MultiViews AllowOverride All Require all granted </Directory> </VirtualHost> 
配置指令解析
下表详细解释了上述代码中的关键指令:
| 指令 | 作用 | 示例 | 
|---|---|---|
<VirtualHost *:80> | 
定义一个虚拟主机块,代表监听所有IP,80是端口号。 | 
<VirtualHost *:80> | 
ServerName | 
指定该虚拟主机的主域名,这是浏览器中输入的地址。 | ServerName project-a.local | 
DocumentRoot | 
指定该域名指向的网站文件根目录的绝对路径。 | DocumentRoot "C:/wamp64/www/project-a" | 
<Directory> | 
为特定目录设置访问权限和其它选项。 | <Directory "C:/wamp64/www/project-a/"> | 
Require all granted | 
允许所有请求访问该目录,这是解决403 Forbidden错误的关键。 | Require all granted | 
AllowOverride All | 
允许使用 .htaccess 文件覆盖目录配置,对于框架(如Laravel)非常重要。 | 
AllowOverride All | 
- 保存并关闭 
httpd-vhosts.conf文件。 
第三步:修改Windows hosts文件
最后一步是告诉你的操作系统,将 project-a.local 和 project-b.local 这些自定义域名指向本地服务器。
- 打开文件资源管理器,导航到 
C:\Windows\System32\drivers\etc\。 - 找到名为 
hosts的文件。注意:直接编辑可能无法保存,因为需要管理员权限。 - 右键点击 
hosts文件,选择“以管理员身份运行”的方式用记事本或其它文本编辑器打开它。 - 在文件的末尾,添加以下两行:
0.0.1 project-a.local 127.0.0.1 project-b.local - 保存文件并关闭编辑器。
 
第四步:重启服务并测试
所有配置都已完成,现在需要让WAMP重新加载配置。
- 左键单击WAMP任务栏图标,点击“重启所有服务”,你也可以选择单独“重启Apache”。
 - 等待图标变为绿色,表示所有服务已成功启动。
 - 打开浏览器,分别访问 
http://localhost、http://project-a.local和http://project-b.local,如果一切正常,你应该能看到各自项目目录下的网站内容。 
相关问答FAQs
问题1:配置完成后,浏览器显示“403 Forbidden”错误,怎么办?

解答: “403 Forbidden”错误通常意味着Apache服务器找到了你请求的目录,但没有权限访问它,最常见的原因是 <Directory> 指令块中的权限设置不正确,请检查 httpd-vhosts.conf 文件中你为项目设置的 <Directory>...</Directory> 部分,确保其中包含 Require all granted 这一行,对于较旧版本的Apache,可能需要使用 Order allow,deny 和 Allow from all,请确认 DocumentRoot 和 <Directory> 指向的路径完全一致且正确无误。
问题2:为什么配置虚拟主机后,我原来的 localhost 无法访问了?
解答: 这是一个非常常见的问题,当你在 httpd-vhosts.conf 中定义了任何 <VirtualHost> 块后,Apache的默认主机行为会被覆盖,它会将第一个定义的虚拟主机作为默认主机,如果你只为新项目创建了虚拟主机配置,而没有为 localhost 创建一个,那么访问 localhost 时,Apache会尝试匹配你定义的第一个项目(如 project-a.local),或者找不到匹配项而报错,解决方法就是像本文第二步示例代码那样,在 httpd-vhosts.conf 文件的顶部显式地为 localhost 添加一个虚拟主机配置,确保其 ServerName 为 localhost,DocumentRoot 指向 C:/wamp64/www,这样就能保证 localhost 和你的其他虚拟主机都能正常工作。