滚动新闻 →
AI泡沫担忧致日股重挫 日经指数跌破57000点 MySQL 全表扫描意味着什么?从 EXPLAIN 认识数据库性能问题 陕西商南凶案嫌犯逃亡两日后深山自尽 俄方以制裁为由接管日烟资产 日本敦促立即撤销 《白衣逆行者》撤档引争议 电影方未回应集体抵制 男子向警车投掷汽油瓶引发火灾 警方跨区追捕10小时擒凶 中国女厕偷拍黑产蔓延 超14万女性受害 河北中学厕所冲突致13岁学生死亡 4人获刑 从古典文学看中国人的时间观念 内部人士曝马兴瑞接班饭局内幕 触犯习大忌 经络理论在传统医学中的形成 印章上的篆书为什么特别多 中共大搞3C检查 多地五金店“恐慌式闭店” 巴拉圭银行倒闭 总统潘尼亚抢先国会弹劾提离职 赖均辅逆转许皓鋐 玄乐杯决赛第三局上演惊天逆转 刘云平将成美国国会亚裔最高职位者 民主党夺回国会布局完成 医药高官余艳红主动投案 涉及与习御医曾益新密切关联 如何教育孩子为自己的行为承担后果 欧洲多国航班接连遭遇炸弹恐吓 超25架客机受影响 进化骗局(34) 造假打磨 世界认可 陆配亚亚返乡后展示卫星影像 引发两岸舆论争议 民主党内部派系博弈加剧 四大政治挑战浮现 为什么剪辑不是简单地把片段拼起来 纽约布鲁克林住宅火灾致6人遇难 锂电池或成主因 台湾AI产业带动经济回暖 百货业预期景气延续至2027年 万斯直指伊朗战争影响选情 赫格塞斯或遭弹劾 台股重挫逾3700点失守年线 新台币跌破33元创逾1年半新低 退休夫妇邮轮退休梦破灭 突发停运令203名住户陷入困境 美国国会权力更迭 或重塑全球外交格局 APEC暗潮涌动 美中俄会晤能否成行留悬念 晚清为什么不断出现改革与失败 加拿大公布新预算案 卡尼推动经济自主 赤字引发关注 台湾退役军官涉中共选举干预遭限制出境 中共对台跨境镇压升级 九大手段威胁民主自由 美军加速部署无人机防御体系 涉及超2.5万套装备 纽约布鲁克林木质排屋火灾致6死9伤 美股四大指数重挫 AI科技股集体暴跌 英伟达特斯拉跌逾9% 小户型如何利用墙角空间 欧洲多架航班遭遇炸弹威胁 战斗机紧急护航 加拿大面临中共渗透风险 专家呼吁加强安全审查

虚拟主机怎么配置?让不同 PHP 项目使用独立域名进行本地开发

发布时间: 2026-09-21 17:00:02    最后更新: 2026-11-05 21:37:13    阅读:101  约11 分钟阅读     

虚拟主机怎么配置?让不同 PHP 项目使用独立域名进行本地开发
图片说明:示意图   图片来源:Public Domain(公有领域)
本地开发 PHP 项目时,如果所有程序都通过 localhost 访问,项目数量一多就容易混淆。例如一个项目位于 C:\xampp\htdocs\project1,另一个项目位于 C:\xampp\htdocs\project2,每次访问都需要记住不同的目录路径。更方便的做法,是让每个项目拥有自己的本地域名,例如 project1.local 和 project2.local。 这里需要先澄清一个概念。多个项目并不是“共用一个 VirtualHost”,而是运行在同一个 Apache 服务实例上,由多个 VirtualHost 分别负责不同域名。Apache 根据浏览器请求中的域名,把请求交给对应的项目目录。这样既可以区分不同项目,也能够更接近真实服务器上的域名访问方式。 Windows 本地虚拟主机通常涉及三个部分:hosts 文件、Apache VirtualHost 配置以及项目目录。三者必须相互对应。 首先修改 Windows 的 hosts 文件。文件位置通常是: C:\Windows\System32\drivers\etc\hosts 使用管理员权限打开编辑器,然后加入: 127.0.0.1 project1.local 127.0.0.1 project2.local 这里不要求域名必须使用小写,DNS 名称本身不区分大小写。实际开发中采用统一的小写命名只是为了避免人为混乱。 保存之后,可以打开命令提示符测试: ping project1.local 或者使用: nslookup project1.local 不过需要注意,nslookup 在某些情况下主要查询 DNS 服务,并不能完全代表系统 hosts 解析路径。更直接的测试方式是使用: curl http://project1.local 如果 Apache 已经配置正确,就应该能够得到对应网站的响应。 接下来配置 Apache。以 XAMPP 为例,常见配置文件是: C:\xampp\apache\conf\extra\httpd-vhosts.conf 同时需要确认主配置文件 httpd.conf 中已经加载了这个文件。如果下面这一行前面存在 #,需要根据实际安装环境取消注释: Include conf/extra/httpd-vhosts.conf 然后可以配置第一个项目: ServerName project1.local DocumentRoot "C:/xampp/htdocs/project1" Options Indexes FollowSymLinks AllowOverride All Require all granted 第二个项目则使用另外一个域名和目录: ServerName project2.local DocumentRoot "C:/xampp/htdocs/project2" Options Indexes FollowSymLinks AllowOverride All Require all granted 这样,当浏览器访问 http://project1.local 时,Apache 会把请求交给 project1;访问 http://project2.local 时,则交给 project2。 这也是虚拟主机最重要的作用:同一个服务器、同一个80端口,可以根据请求域名把流量分配给不同的网站。因此,不需要为了两个 PHP 项目分别使用 80 和 8080。只有当不同服务确实需要监听不同端口时,才需要配置不同端口。 配置完成后,最好先检查 Apache 配置语法,而不是直接反复重启。XAMPP 可以通过 Apache 控制面板查看错误,也可以在命令行运行 Apache 提供的配置测试命令。常见命令是: httpd.exe -t 如果输出 Syntax OK,说明基本语法没有问题。如果出现错误,则应该先解决配置文件中的语法问题。 修改配置后需要重新加载或重启 Apache。否则新配置可能尚未进入运行中的 Apache 进程。 Windows 本地虚拟主机最容易出现的问题之一,是Apache虽然启动正常,但访问所有域名时却进入同一个项目。这通常与VirtualHost配置、默认虚拟主机或者ServerName没有正确匹配有关。 另一个常见问题是403 Forbidden。出现403时,不应该简单认为“Windows目录权限不足”。Apache访问目录还涉及 配置、文件系统权限、AllowOverride 设置以及项目目录中的 .htaccess。如果项目依赖 .htaccess 实现URL重写,还需要确认 AllowOverride 与对应模块配置符合项目要求。 如果访问页面出现404,则需要检查 DocumentRoot 是否指向正确目录,以及项目本身的入口文件和URL重写规则是否正确。尤其是Laravel、Symfony等框架,网站根目录通常应该指向项目的 public 目录,而不是整个项目目录。 例如Laravel项目更适合配置为: DocumentRoot "C:/xampp/htdocs/myapp/public" 而不是: DocumentRoot "C:/xampp/htdocs/myapp" 这不仅关系到路由,也涉及不应该直接暴露给Web服务器访问的项目文件。 本地域名也不一定非要使用 .local。.test 是专门保留给测试用途的顶级域名,因此本地开发中使用 project1.test、project2.test 是一个很常见的选择。.local 在部分网络环境中还可能与本地网络名称解析机制产生关联,因此如果希望减少潜在冲突,可以考虑使用 .test。 如果项目需要HTTPS,则配置会进一步增加。Apache需要监听443端口,并为对应域名配置SSL虚拟主机。例如: ServerName project1.test DocumentRoot "C:/xampp/htdocs/project1" SSLEngine on SSLCertificateFile "C:/xampp/apache/conf/ssl.crt/project1.crt" SSLCertificateKeyFile "C:/xampp/apache/conf/ssl.key/project1.key" AllowOverride All Require all granted 但HTTPS本地开发还有一个经常被忽略的问题:证书是否被操作系统和浏览器信任。 自己生成一个自签名证书,并不意味着浏览器会自动信任它。访问时可能出现证书不受信任的警告。实际开发中,可以使用本地开发证书工具生成受信任的本地证书,例如使用mkcert为指定本地域名创建证书,再配置到Apache中。 如果使用多个HTTPS本地域名,每个域名都需要正确匹配证书。现代浏览器通过TLS连接中的SNI等信息让同一个443端口承载多个HTTPS虚拟主机,因此同样没有必要为每个项目分配一个不同端口。 端口问题应该单独理解。如果Apache监听80端口,而另一个程序已经占用了80端口,Apache就可能无法启动。Windows下可以使用: netstat -ano | findstr :80 检查80端口当前由哪个进程使用。然后根据PID进一步确认对应程序。 如果需要使用8080,也可以让Apache监听8080,例如: Listen 8080 然后配置: 访问地址就变成: http://project1.test:8080 但这属于端口级别的调整,并不是配置多个项目时的必要条件。 对于日常PHP开发,还可以把每个项目的VirtualHost配置独立保存。随着项目增加,把所有配置塞进一个巨大文件会越来越难维护。可以根据Apache版本和实际配置方式,把站点配置拆分管理,再通过Include统一加载。 排查本地虚拟主机时,可以按照一个固定顺序进行。首先确认hosts是否把域名解析到了正确地址;然后确认Apache是否正在运行以及监听正确端口;接着检查VirtualHost配置是否被加载;之后检查ServerName、DocumentRoot和Directory配置;最后再检查项目自身的PHP、.htaccess、路由以及应用程序错误。 如果想进一步确认Apache到底把某个域名交给了哪个VirtualHost,可以查看Apache启动时加载的虚拟主机配置以及错误日志。相比不断修改配置文件,这种方法更容易定位问题。 Docker环境则是另一种思路。每个PHP项目可以运行在独立容器中,再通过Nginx、Traefik或者其他反向代理,根据域名把请求转发到不同容器。这种方式更接近容器化生产环境,但需要额外处理网络、端口、容器名称和代理配置。对于单机上的几个普通PHP项目,Apache VirtualHost通常已经足够。 本地虚拟主机的价值并不只是把 localhost 换成几个好看的域名。它可以让不同项目拥有独立的Cookie作用域、URL结构和站点配置,也方便测试依赖域名的登录、重定向、回调地址以及部分Web应用功能。不过,本地域名只是开发环境的一部分,生产环境中的DNS、HTTPS证书、反向代理、Web服务器和防火墙仍然需要独立配置。 如果只是开发几个PHP网站,最简单的结构就是:hosts负责“域名指向本机”,Apache VirtualHost负责“域名对应哪个项目”,DocumentRoot负责“网站文件在哪里”。把这三个层次分清楚以后,即使以后增加十几个本地项目,也不需要不断修改Apache端口,只需要增加对应的域名和VirtualHost配置即可。

喜欢这篇报道?

使用下面的功能,方便以后继续阅读和分享 MNewsTV

设为 Google 新闻首选来源 让 Google 新闻优先显示 MNewsTV 的最新报道 ›
★ 我的收藏 查看已经收藏的文章
关于文章收藏 收藏不需要注册帐号,收藏信息仅保存在当前浏览器中。 删除收藏请进入「我的收藏」进行管理。
分享这篇报道

捐助(Paypal): https://www.paypal.me/observeccp
订阅中国观察电报 Telegram : https://t.me/s/ObserveCCP