如何为PHP服务动态添加自定义域名别名(无跳转)
解决方案
1. 先解决虚拟主机域名绑定问题
你的CNAME解析已经生效,但请求没触发目标站点的核心原因是虚拟主机未将客户域名(如landing.client.com)绑定到cname.service.com对应的主机账户。虚拟主机环境下,只有完成域名绑定,服务器才会将该域名的请求转发到对应站点目录,否则会返回默认站点或无响应,自然不会生成访问日志。
操作:在虚拟主机控制面板中,将所有客户的自定义域名添加到cname.service.com所在主机账户的「绑定域名」列表中。
2. 修正.htaccess,统一转发请求到PHP路由
原.htaccess规则既无法实现动态映射,还存在捕获组错误(%1无对应匹配逻辑)。修改为将所有请求转发到一个PHP入口文件,由PHP处理域名与落地页的动态映射:
RewriteEngine On # 排除真实存在的静态资源(避免CSS/JS/图片被错误转发) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 将所有请求转发到router.php,保留原始请求路径和查询参数 RewriteRule ^(.*)$ router.php?path=$1 [QSA,L]
3. 实现动态域名映射的PHP路由(router.php)
步骤1:建立域名映射数据库表
创建一张表存储客户域名与对应落地页的关联关系,示例结构:
CREATE TABLE landing_domain_mappings ( id INT AUTO_INCREMENT PRIMARY KEY, client_domain VARCHAR(255) NOT NULL UNIQUE, landing_path VARCHAR(255) NOT NULL, -- 对应app.service.com后的长路径,如abc123-xyz created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
添加示例数据:
INSERT INTO landing_domain_mappings (client_domain, landing_path) VALUES ('landing.client.com', 'abc123-xyz');
步骤2:编写router.php核心逻辑
<?php // 获取当前请求的域名(自动去除端口号) $host = preg_replace('/:\d+$/', '', $_SERVER['HTTP_HOST']); // 连接数据库查询对应落地页路径 $pdo = new PDO('mysql:host=localhost;dbname=your_db;charset=utf8', 'db_user', 'db_password'); $stmt = $pdo->prepare("SELECT landing_path FROM landing_domain_mappings WHERE client_domain = ?"); $stmt->execute([$host]); $mapping = $stmt->fetch(PDO::FETCH_ASSOC); if ($mapping) { $landingPath = $mapping['landing_path']; // 适配原系统的参数逻辑,直接调用落地页处理文件 $_GET['landing_id'] = $landingPath; include __DIR__ . '/landing.php'; // 替换为你系统中处理落地页的实际文件路径 } else { // 无匹配域名,返回404 http_response_code(404); echo "404 Not Found"; } ?>
4. 静态资源适配
如果落地页使用相对路径引用静态资源(如./css/style.css),在客户域名下访问时会请求landing.client.com/css/style.css导致404,可通过以下方式解决:
- 将所有静态资源改为绝对路径,如
//service.com/assets/css/style.css - 或在.htaccess中添加规则,将静态资源请求转发到服务域名的对应路径:
# 转发静态资源到服务域名的对应路径 RewriteRule ^(assets/.*)$ https://app.service.com/$1 [L]
可扩展性说明
- 新增客户域名时,只需在数据库中添加一条映射记录,无需修改服务器配置
- 若虚拟主机支持批量添加域名,可配合脚本批量绑定,减少人工操作
内容的提问来源于stack exchange,提问作者paperman
相关产品推荐
相关产品推荐

