你肯定遇到过这种情况——本地开发好的网站,用localhost访问一切正常,换个域名就死活加载不出CSS样式。去年我帮朋友调试APMServ时,光解决这个问题就折腾了半宿,最后发现是虚拟主机配置少了个斜杠。今儿咱们就掰开揉碎了说,怎么在APMServ里把域名玩得溜溜转。
# 先整明白APMServ是啥玩意儿
说白了这就是个Windows下的PHP环境集成包,跟XAMPP算表兄弟。但有个牛逼之处——自带端口转发功能,特别适合需要同时跑多个项目的老铁。重点来了:它的配置文件藏在安装目录\APMServ5.2.6\Apache\conf\httpd.conf,改之前记得备份!
有个血泪教训:某程序员直接修改原文件没备份,结果手抖删了行代码,20多个虚拟站点全挂。现在我都教人用Notepad++的"对比文件"功能,改前改后差异一目了然。
——————————————————————————————————
# 本地域名配置四步走
- 改hosts文件:C:\Windows\System32\drivers\etc里找到hosts,加上"127.0.0.1 yourdomain.com"
- 配虚拟主机:在httpd.conf最下面加这段代码:
DocumentRoot "D:/www/yourproject"ServerName yourdomain.com
- 重启服务:关APMServ必须用自带菜单,直接点×关闭会残留进程
- 验证生效:浏览器输yourdomain.com能访问,但别急着乐——这时候样式可能还是崩的
样式崩了咋整?
九成九是路径问题。教你个绝招:在代码里用绝对路径"/css/style.css",别用相对路径。去年有个电商项目,因为背景图路径写成"../images/bg.jpg",在域名访问时全变叉烧包,损失半天促销时间。
——————————————————————————————————
# 端口冲突怎么破
APMServ默认用80端口,要是被占用了(比如你开着IIS),改两个地方:
- httpd.conf:把Listen 80改成Listen 8080
- 虚拟主机配置:
但这时候访问域名得带端口号yourdomain.com:8080,忒麻烦。终极方案是用nginx反向代理,不过那又是另一个坑了。
# HTTPS本地调试大坑
现在网站都要上SSL证书,本地怎么搞?APMServ其实内置了OpenSSL:
- 生成自签名证书:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
- 修改httpd.conf加上:
SSLEngine onSSLCertificateFile "C:/cert.pem"SSLCertificateKeyFile "C:/key.pem"
但浏览器会报不安全,得手动点"高级"-"继续访问"。有个做支付的客户非要在本地调微信支付,结果卡在这步三天没睡好觉。
——————————————————————————————————
# 多项目并行怎么玩
接私活的老铁看过来——同时开5个项目的正确姿势:
- 每个项目建独立文件夹,比如D:\www\project1到project5
- 给每个域名配单独的区块
- 用不同端口区分:81、82...85
- 在APMServ的"访问URL"列表里添加映射关系
不过要注意:Windows的hosts文件最多支持9个别名,超过这个数得用通配符域名。我去年帮外包公司搭测试环境,整了个*.test.com,所有子域名全指向本地,省事得飞起。
上周处理了个奇葩案例:客户非要用"张三.测试",结果APMServ的Apache版本不支持punycode转码。最后换成PHPStudy才搞定,这事儿告诉我们——别跟老工具较劲,该升级时就升级。
最后说句掏心窝的:能用现代工具就别死磕APMServ了,现在Docker配个LAMP环境比这方便十倍。不过你要是维护老项目,照着上面这些坑点避着走,起码能少掉几把头发。昨天还有人问我,配置完域名怎么外网访问?兄弟,这就涉及到内网穿透了,咱下回再唠!