You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:25:24