在phpStudy里让一个站点响应多个域名,本质就是给同一个网站根目录配置多个server_name或ServerAlias。面板只是把Apache、Nginx的虚拟主机配置包装了一下,理解这一点,后面排错会轻松很多。
打开phpStudy,切到网站页,找到要绑定的站点,点管理里的修改。域名框里可以填多个域名,通常用空格隔开,比如example.com、www.example.com、example.net。保存后,面板会重写vhosts配置。如果是新建站点,创建时直接填多个域名即可。老版本phpStudy在站点域名管理里操作,逻辑一样。
填完后别急着访问。本地测试要改hosts文件,路径是C:\Windows\System32\drivers\etc\hosts,用管理员权限编辑,加入127.0.0.1 example.com和127.0.0.1 example.net。每行一个,不要带端口。改完在命令行执行ipconfig /flushdns。外网测试则把域名A记录解析到服务器公网IP,国内服务器还要确认域名已备案并接入。
如果面板保存后只生效一个域名,检查是否重启了Apache或Nginx。phpStudy有重载或重启按钮,配置改动需要生效。再打开vhosts目录看实际配置。Apache一般在phpStudy\Extensions\Apache2.4.39\conf\vhosts,Nginx在phpStudy\Extensions\Nginx1.15.11\conf\vhosts,版本号可能不同。Apache示例:
ServerName example.com
ServerAlias www.example.com example.net
DocumentRoot "D:/phpstudy_pro/WWW/example"
Options +Indexes +FollowSymLinks +ExecCGI
AllowOverride All
Require all granted

Nginx示例:
server {
listen 80;
server_name example.com www.example.com example.net;
root D:/phpstudy_pro/WWW/example;
index index.php index.html;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
这里关键是ServerAlias和server_name后面把域名写全,不带http://,不带路径。Apache用空格分隔,Nginx也用空格分隔,最后分号别漏。
HTTPS情况要单独说。一个证书如果只签了example.com,那www.example.net走https会报证书错误。要么每个域名单独申请证书,要么申请多域名SAN证书,把要用的域名都加进去。phpStudy面板里可以给站点部署SSL,但证书不匹配时浏览器照样拦。端口不是80时,访问要带端口,比如example.com:8080,hosts里不要写端口。
程序层面也常被忽略。WordPress这类程序会把站点地址写进数据库,绑了多个域名后,可能自动跳到原来那个域名。可以在wp-config.php里动态定义WP_HOME和WP_SITEURL,例如:
define(''WP_HOME'', ''http://''.$_SERVER[''HTTP_HOST'']);
define(''WP_SITEURL'', ''http://''.$_SERVER[''HTTP_HOST'']);
这样多个域名访问时不会互相跳。其他CMS也有类似站点URL设置,检查数据库或配置文件。
如果多个域名要指向不同目录,不要硬塞在一个站点里。建多个站点,每个站点绑自己的域名和根目录更清晰。一个站点绑多个域名,适合品牌域名、备用域名、带www和不带www同时访问。最后检查防火墙80和443端口、安全组、CDN缓存以及浏览器缓存。用curl -I http://example.net看返回的Server和状态码,比只看浏览器准。这样配置完,一个phpStudy站点就能稳定响应多个域名。