使用PHPStudy搭建二级域名详解
前提条件准备
项目 | 要求 | 说明 |
---|---|---|
软件版本 | PHPStudy最新版(推荐v8.1+) | 确保支持Nginx/Apache多站点配置 |
主机环境 | Windows系统 | 本文以Windows为例,Linux用户需调整路径权限 |
域名解析 | 主域名已备案且完成A记录指向服务器IP | 如example.com 解析到你的公网IP |
本地测试 | 可暂时修改Hosts文件跳过DNS注册商设置(仅用于调试) | C:\Windows\System32\drivers\etc\hosts中添加 二级域名 IP |
配置步骤分解
1️⃣ 创建站点根目录结构
D:\phpstudy_pro\Wwwroot/ # 默认Web根目录 ├── maindomain.com # 主站内容 └── sub.example.com # 新建二级域名对应文件夹
⚠️ 注意:子目录名称必须与你要绑定的二级域名完全一致(区分大小写)
(图片来源网络,侵删)
2️⃣ 配置虚拟主机规则
进入PHPStudy控制面板 → 点击左侧菜单栏的【站点管理】→选择【新增站点】:
| 参数项 | 设置示例 | 作用说明 |
|----------------------|------------------------------|----------------------------------------|
| 域名 | sub.example.com
| 填写完整的二级域名 |
| 网站目录 | D:\phpstudy_pro\Wwwroot\sub.example.com
| 对应上述创建的物理路径 |
| 运行方式 | Nginx或Apache(根据需求选择) | 推荐Nginx性能更优 |
| PHP版本 | 74及以上版本 | 兼容最新框架特性 |
| 是否启用SSL | 勾选并配置证书路径 | 强制HTTPS访问(可选但建议开启) |
3️⃣ 修改配置文件高级设置(关键!)
对于Nginx用户:编辑conf/vhost/sub.example.com.conf
文件,添加以下核心片段:
server { listen 80; server_name sub.example.com; # 必须与域名完全匹配 root D:/phpstudy_pro/Wwwroot/sub.example.com; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } # PHP解析配置 location ~ \.php$ { fastcgi_pass unix:/tmp/php-cgi.sock; # Windows改为TCP端口如127.0.0.1:9000 include fastcgi_params; } }
📌 Windows特殊处理:若使用TCP连接PHP-FPM,将
fastcgi_pass
改为0.0.1:9000
4️⃣ 重启服务使配置生效
✅ 操作路径:PHPStudy主界面右上角 → 【重启Nginx】或【重启Apache】
✅ 验证命令:在终端执行 curl -I http://sub.example.com
查看响应头是否包含正确Server信息

常见问题排查手册
现象 | 可能原因 | 解决方案 |
---|---|---|
浏览器报“无法访问此网站” | 防火墙拦截端口 | 检查安全组策略,开放80/443端口 |
出现默认404页面 | 文档根目录设置错误 | 确认root 指令路径与实际文件夹一致 |
PHP文件被下载而非执行 | FastCGI未正确加载 | 检查location ~ \.php$ 段落配置 |
HTTPS证书警告 | SSL链不完整 | 确保中间证书也已导入 |
进阶优化建议
- 🔧 伪静态规则:在子站点目录下创建
.htaccess
(Apache)或nginx.conf
实现URL重写 - 🚀 缓存加速:启用OpCache组件提升PHP执行效率
- 🛡️ 安全防护:通过
fail2ban
模块限制暴力破解尝试次数
相关问题与解答
Q1:为什么配置后仍然跳转到主站?
👉 解答:这是由于Nginx优先匹配第一个符合条件的server块导致的,解决方法有两种:①调整虚拟主机配置文件的顺序,将二级域名放在前面;②在主站配置中添加精确匹配的if ($host != 'sub.example.com') { return 404; }
判断语句。
Q2:如何实现多个二级域名共享同一套代码?
👉 解答:可以通过$_SERVER['HTTP_HOST']
变量动态识别当前访问的域名,例如在入口文件中添加逻辑:
switch($_SERVER['HTTP_HOST']) { case 'shop.example.com': define('APPLICATION_MODE', 'shopping'); break; case 'blog.example.com': define('APPLICATION_MODE', 'blogging'); break; default: die("Invalid domain
