PHPnow本地环境配置域名访问,核心就两步:改hosts文件让域名指向127.0.0.1,再改Apache的httpd.conf增加虚拟主机配置,重启服务即可生效。整个过程不需要安装额外软件,也不涉及复杂的端口转发,只要按顺序操作就能避免大部分报错。
phpnow配置域名访问前的准备工作
在动手之前,先确认你的PHPnow环境还能正常跑起来,如果你还在用老版本的PHPnow(比如1.5.6),建议先看一眼D:PHPnow目录下是否有Apache-20或Apache-22这样的文件夹,这个目录结构直接决定了你后面要改哪个配置文件。
需要确认的三件事:
- PHPnow版本号,右键点击
PnCp.cmd选择编辑,能看到版本信息 - Apache的安装路径,一般位于
D:PHPnowApache-20或D:PHPnowApache-22 - Windows系统版本,Win7及以上用管理员身份打开记事本,XP系统直接双击打开hosts文件
常见误区: 不少人舍不得放弃PHPnow是因为它集成了MySQL和phpMyAdmin,如果你只是为了本地调试老项目,继续用完全没问题,但如果你打算搞新项目,业内专家建议直接用phpStudy或宝塔面板,毕竟PHPnow已经停止更新很多年了,PHP版本停留在5.2时代,很多新语法跑不起来。
phpnow本地环境绑定域名的核心原理
本地配置域名访问,本质上是在做两件事:让系统把某个域名解析到本机IP,让Apache识别这个域名并分配对应的站点目录。
浏览器访问http://myproject.test时,会按顺序做两件事情,它先去问DNS服务器这个域名对应的IP是多少,如果DNS上没有记录,Windows系统会先查本地hosts文件,我们在hosts里加一条0.0.1 myproject.test,浏览器就会把请求发到本机。
请求到了本机之后,Apache收到一个带域名头部的HTTP请求,它会在httpd.conf里找匹配的<VirtualHost>配置块,根据ServerName字段决定把请求交给哪个目录,如果找不到匹配项,Apache会用默认站点兜底。
行业内把这个过程叫做基于域名的虚拟主机,每个VirtualHost块可以绑定不同的域名,指向不同的磁盘目录。
phpnow配置域名访问的具体操作步骤
这里用一个实际场景来做演示。场景: 我在本机维护一个老客户的WordPress站点,希望用
cms.local这个域名来访问,站点文件放在D:wwwcms。
第一步:修改Windows hosts文件
以管理员身份运行记事本,Win10/11用户直接在开始菜单里搜“记事本”,右键选“以管理员身份运行”,然后打开这个路径:
C:WindowsSystem32driversetchosts
在文件末尾追加一行内容:
0.0.1 cms.local
保存后,打开命令提示符(Win+R输入cmd),执行ipconfig /flushdns刷新DNS缓存,这一步不做的话,某些系统可能要重启浏览器甚至重启电脑才能生效。
如果保存时提示权限不足,说明你的记事本不是管理员模式,关掉重来。不要用记事本另存为到桌面再拖回去,有相当一部分人这样做之后hosts文件变成乱码,因为编码格式不对。
第二步:修改Apache的httpd.conf配置文件
找到Apache配置文件路径:
D:PHPnowApache-20confhttpd.conf
用管理员模式的记事本打开,先搜索httpd-vhosts.conf,找到这一行:
#Include conf/extra/httpd-vhosts.conf
把行首的去掉,保存。
接下来配置文件里的虚拟主机段,在httpd.conf文件的最后位置,如果不加在最后位置,后续调试时容易定位不到问题,添加下面的内容:
<VirtualHost :80>
ServerName cms.local
DocumentRoot "D:/www/cms"
<Directory "D:/www/cms">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
注意路径里的斜杠方向,Apache和Windows不一样,必须用正斜杠,不能用反斜杠。
第三步:重启PHPnow服务生效
在PHPnow目录下双击PnCp.cmd,在交互菜单里输入0(停止全部服务),再输入1(启动全部服务),或者更暴力一点,直接关掉命令窗口,重新运行PnCp.cmd。
浏览器访问http://cms.local,看到你站点页面就是成功了。
如果出现403 Forbidden,多数情况下是目录权限没放开。 检查Directory块里有没有Require all granted这一行,老版本PHPnow的Apache 2.2用的是Allow from all,这个版本差异容易让人踩坑,看报错去改语法。
phpnow配置多域名虚拟主机的方法
工作中很少只跑一个站点,在同一个PHPnow环境下配置多个域名,其实就是复制上面那个VirtualHost块,改掉三处内容:
ServerName改成新域名DocumentRoot指向新目录<Directory>路径同步改
一个完整的双站点配置示例:
<VirtualHost :80>
ServerName cms.local
DocumentRoot "D:/www/cms"
<Directory "D:/www/cms">
Options Indexes
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
<VirtualHost :80>
ServerName shop.local
DocumentRoot "D:/www/shop"
<Directory "D:/www/shop">
Options Indexes
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
同时要在hosts文件里追加0.0.1 shop.local。
固定IP环境下的特殊处理: 如果你的办公电脑有固定局域网IP(比如192.168.1.100),同事想访问你本机的站点,可以把hosts里的地址写成局域网IP而不是0.0.1,这样别人浏览器访问http://cms.local时,请求会直接到你的电脑,但前提是Windows防火墙放行了80端口,否则外部访问还是会被拦下来。
这个场景在对接前后端联调时比较常见,本地环境绑定的域名也可以让同一个局域网的其他设备访问。
配置域名后常见的几个故障排查
配置过程轻车熟路,但总有意外,以下是phpnow本地环境绑定域名后最常遇到的几个问题,依次排查能解决大多数问题:
-
访问域名还是跳到默认页:检查Apache里有没有把原来的
Listen 80默认站点注释掉,PHPnow默认的httpd.conf有一段DocumentRoot "D:/PHPnow/www"的配置,如果没有改掉,所有没匹配到VirtualHost的请求都会走默认目录,建议把默认的VirtualHost段也删掉,或者把根目录VirtualHost的ServerName设为localhost。 -
服务启动失败:大概率是httpd.conf语法错误,在命令行进入PHPnow目录,输入
Apache-20binhttpd.exe -t能检查配置语法,这会输出具体的错误行号和原因,比肉眼找靠谱得多。 -
带www的域名打不开:
http://www.cms.local和http://cms.local在Apache眼里是两个不同的域名,如果想两个都支持,需要在VirtualHost里加一条ServerAlias www.cms.local。 -
改hosts文件被安全软件拦截:360和腾讯管家有时候会拦截hosts文件修改,看到弹窗就选“允许”,或者临时退出安全软件再改。
-
访问时提示端口被占用:用
netstat -ano | findstr :80查看哪个进程占用了80端口,常见冲突源是IIS、迅雷下载、Skype。
后续升级:域名访问配置里关于HTTPS的补充
如果你的项目是给客户端演示用的,可能需要配置https访问,PHPnow自带的Apache一般不启用SSL模块,需要做两个调整:
- 在httpd.conf里打开
LoadModule ssl_module modules/mod_ssl.so,去掉注释 - 引入
httpd-ssl.conf配置文件
但说句实在话,老版本Apache配置HTTPS证书比较麻烦,而且Let’s Encrypt的免费证书现在不提供IP证书,你需要用win-acme这类工具来配合签发,在本地环境里配置HTTPS,工作量和收益不成正比。
对于临时演示场景, 建议直接用http访问,或者用ngrok这类内网穿透工具映射到公网,自动带HTTPS,不必在PHPnow上死磕SSL。
常见问题解答
phpnow配好域名后为什么电脑重启又失效了
因为你没有以管理员权限修改hosts文件,普通权限保存hosts时写入的是临时缓存,重启后被系统还原,重新以管理员身份编辑hosts文件,确认右下角没有“已还原默认值”的提示窗口。
phpnow本地环境配置域名访问和直接用localhost有什么区别
localhost访问走的是回环接口,浏览器和Apache之间的通信不经过网卡,而配置域名访问本质上也是解析到127.0.0.1,两者速度差距你感知不到,区别在于Cookie作用域和跨域请求:有些开发框架区分域名,比如你在http://localhost下登录,再用http://cms.local访问时session是独立的,需要重新登录,另外一些前端构建工具里配置了域名白名单,localStorage的存储也按域名隔离,用一个自定义域名固定下来之后,首次配置稍麻烦一点,后期能避开很多奇奇怪怪的问题。
Apache修改配置后不需要重装就能让新域名生效吗
不需要重装,只需要重启Apache服务,在PnCp.cmd里选择重启项即可,重启动作会重新加载httpd.conf,所有配置变更一次性生效,如果改了hosts文件,记住同步刷新DNS缓存,命令是ipconfig /flushdns。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/628863.html





