服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-10-10 更新于 2026-10-10 简米科技 4,361 字 10 分钟阅读

php如何正确配置二级域名绑定到指定目录?,二级域名怎么绑定

导读二级域名绑定指定目录的正确做法,是先让DNS把域名解析到服务器IP,再在Web服务器中为这个域名单独配置根目录,最后用PHP代码做一次域名路由兜底,很多人一开始只在PHP里判断域名,结果请求根本没到达指定目录,根源就在于Web服务器的虚拟主机配置没做对,网站二级域名如何绑定指定目录:先分清两个层面二级域名和子目……

二级域名绑定指定目录的正确做法,是先让DNS把域名解析到服务器IP,再在Web服务器中为这个域名单独配置根目录,最后用PHP代码做一次域名路由兜底。很多人一开始只在PHP里判断域名,结果请求根本没到达指定目录,根源就在于Web服务器的虚拟主机配置没做对。

网站二级域名如何绑定指定目录:先分清两个层面

二级域名和子目录是两个不同层面的东西,DNS只负责把 demo.example.com 解析到服务器IP,至于这个域名进来后读取哪个文件夹,是Web服务器说了算,业内专家指出,不先搞定Web服务器层面的映射,PHP写再多判断逻辑也接不到请求。

用Nginx配置二级域名到子目录的具体步骤

以最常见的Nginx + PHP-FPM组合为例,操作路径很清晰。

  • 先在DNS控制台添加一条A记录,把 demo.example.com 解析到服务器IP,等待生效。
  • 编辑Nginx配置,通常放在 /etc/nginx/conf.d/ 下,新建一个 demo.conf。
  • 写入一个独立的server块,核心就是 server_name 和 root 两个指令。
  • 执行 nginx -t 检查语法,systemctl reload nginx 重载配置。

示例配置如下:

server {
    listen 80;
    server_name demo.example.com;
    root /var/www/demo;
    index index.php index.html;
    location ~ .php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

这段配置的关键在于 root 指向了 /var/www/demo,这样 demo.example.com 的所有请求都会被引导到该目录,PHP文件则通过fastcgi参数交给PHP-FPM处理。

Apache环境下二级域名绑定目录的两种写法

如果你用的是Apache,思路完全一样,区别在写法。

  • 在虚拟主机配置文件里加一个 <VirtualHost :80> 段落,设置 ServerName 和 DocumentRoot。
  • 在httpd.conf中开启 mod_rewrite,通过 .htaccess 做域名判断,这种方式配置灵活,但每次请求都要解析额外规则,性能略低,不推荐在高并发场景下使用。

宝塔面板二级域名绑定目录的PHP环境配置实操

php如何正确配置二级域名绑定到指定目录?,二级域名怎么绑定

很多朋友使用宝塔面板,因为可视化操作确实省事,宝塔面板二级域名绑定目录的路径是:网站 → 添加站点 → 填写域名 → 修改根目录。

具体步骤如下:

  • 登录宝塔面板,进入“网站”菜单。
  • 点击“添加站点”,在域名输入框填入 demo.example.com。
  • 根目录不要用默认生成的路径,手动改成目标目录,/var/www/demo。
  • PHP版本根据项目需求选择,通常用PHP 7.4或8.1稳定版。
  • 提交后,如果跑的是ThinkPHP、Laravel这类框架,在站点设置里的“伪静态”中直接选择对应模板。

这一步做好后,二级域名的请求就会落在指定目录里,整个过程不需要手动改Nginx配置,面板帮你生成好了。

绑定后访问404或500的排查顺序

绑定完目录,访问却报错,这是高频问题,排查顺序建议从外向里。

  • 先确认根目录下存在 index.php,并且文件名没有拼错。
  • 再检查目录权限,确保运行PHP的用户,www,至少拥有读和执行权限。
  • 然后看Nginx错误日志,位置通常在 /var/log/nginx/error.log。
  • 最后确认PHP-FPM进程启动正常,而且监听端口和Nginx配置里的 fastcgi_pass 一致。

多数情况的报错原因是权限不足,而不是配置有问题。

二级域名的Cookie和Session不能共享怎么办

主域名和二级域名是不同的域,浏览器会默认隔离Cookie,如果你在 example.com 登录后,跳到 demo.example.com 又变成未登录状态,就需要主动设置Cookie的作用域。

行业共识认为,跨子域共享登录态时,把Cookie域设置为 .example.com 是标准做法,在PHP里可以这样设置:

session_set_cookie_params([
    'domain' => '.example.com',
    'path' => '/',
    'secure' => true,
    'httponly' => true,
]);

也可以在 php.ini 中修改 session.cookie_domain 为 .example.com,需要提醒的是,修改后旧Cookie可能失效,用户需要重新登录一次。

Nginx下PHP二级域名绑定的常见坑与伪静态规则

用Nginx绑定二级域名时,最常见的坑是有人把判断逻辑写在

php如何正确配置二级域名绑定到指定目录?,二级域名怎么绑定

location / 里,用PHP代码去include不同目录,这样做的后果是静态资源、图片、CSS全部会走PHP解析,性能非常差,正确做法是先把 root 指到目标目录,让Nginx自己处理静态文件,PHP只负责动态请求。

伪静态规则要跟着站点走

二级域名绑定的目录如果跑的是Laravel或ThinkPHP,伪静态规则需要单独配置,不要把主域名的规则直接复制过来,因为框架的入口文件和目录结构可能不同。

通用规则如下:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

这条规则会让所有非真实文件请求落到 index.php,由框架内部路由处理,如果你的二级域名使用WordPress,则需要在 location / 里加上WordPress的固定链接规则。

SSL证书和二级域名的绑定顺序

先确认DNS解析生效,再签发证书,否则验证会失败,二级域名可以用Let's Encrypt免费证书,也可以申请通配符证书,一个证书覆盖主域名和所有子域名,国内服务器部署时,二级域名同样需要完成ICP备案,据工信部规定,域名只要解析到国内服务器就必须备案,不区分主域还是子域。

二级域名绑定不同目录后,PHP代码里如何做最终兜底

即使Nginx或Apache已经配置好了,也建议在PHP代码里加一层兜底判断,这样可以防止将来迁移服务器时,因为Web服务器配置漏改而出现错乱。

用 $_SERVER['HTTP_HOST'] 获取当前域名,再映射到对应的配置:

$host = $_SERVER['HTTP_HOST'];
switch ($host) {
    case 'demo.example.com':
        define('APP_ROOT', '/var/www/demo/');
        break;
    case 'admin.example.com':
        define('APP_ROOT', '/var/www/admin/');
        break;
    default:
        define('APP_ROOT', '/var/www/main/');
        break;
}

注意,这里只能用 APP_ROOT 作为常量,绝对不要直接用 $host 去拼接文件路径,否则容易引发目录穿越安全风险。

纯代码实现二级域名指向目录的路由逻辑

如果你使用的是共享虚拟主机,没有权限修改Web服务器配置,就只能靠纯PHP实现,在网站根目录放一个 index.php,作为前端控制器。

  • 读取 $_SERVER['SERVER_NAME']

    php如何正确配置二级域名绑定到指定目录?,二级域名怎么绑定

    获取当前域名。

  • 维护一份域名到目录的映射表。
  • 根据请求的路径,包含对应目录下的入口文件。
  • 剩余请求统一交给404处理。

这种方案比较经济,适合部署在低配置主机上,但与Nginx虚拟主机方案相比,每个请求都要执行额外的PHP逻辑,并发高时CPU占用会明显上升。

多站点部署时,二级域名目录权限的常规分配

一台服务器跑多个项目时,不要让所有二级域名共用同一个PHP-FPM池。

  • 每个站点单独创建一个系统用户,并在PHP-FPM配置里指定 user 和 group。
  • 用 open_basedir 限制PHP只能读取自己目录下的文件。
  • 数据库账号权限最小化,生产环境不要用root。
  • 定期检查访问日志,观察是否有跨目录请求。

只有把目录权限边界划清楚,多个二级域名才能在一台服务器上稳定共存。

关于PHP二级域名绑定指定目录的3个高频问题

问题1:二级域名绑定指定目录后,主域名的伪静态规则会影响二级域名吗?

如果二级域名有独立的Nginx server块,则完全不影响,因为每个server配置各自独立,如果使用通配符server块加PHP代码分发,那么伪静态规则可能互相干扰,建议优先采用独立server块。

问题2:一台服务器可以绑定多少个二级域名到不同目录?

理论上没有硬性限制,Nginx可以创建任意数量的server块,但每个PHP-FPM进程都会占用一定内存,动态站点多了之后资源消耗会明显上升,小内存机器跑几十个纯静态站点通常没问题,跑动态PHP站点则需要根据内存大小和流量合理规划。

问题3:二级域名绑定目录后PHP报“No such file or directory”怎么办?

先检查配置中的 root 路径是否存在,再检查PHP-FPM运行用户是否有权限访问该目录,最后排查 open_basedir 和SELinux是否阻止了访问,绝大多数情况是目录权限设置不对,调整用户权限后即可解决。

二级域名绑定指定目录,本质上是Web服务器的虚拟主机配置问题,把Nginx或Apache的 root 指到正确位置,再用PHP代码做一层兜底判断,多站点部署就能干净利落地跑起来。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱