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

如何使用PHP识别域名CNAME记录并将请求重定向至指定文档

PHP 检测访问域名CNAME记录并实现重定向方案

核心实现逻辑

整个流程分为三步:获取当前访问域名、查询域名CNAME记录、匹配规则后执行重定向。

具体实现代码

<?php
// 1. 获取当前访问的域名,过滤非法字符避免注入风险
$currentHost = trim(strtolower($_SERVER['HTTP_HOST']));
// 2. 你预设的目标CNAME记录值,替换为自己实际需要匹配的CNAME地址
$targetCname = 'cname.example.com';
// 3. 匹配成功后的重定向目标地址
$redirectUrl = '/target-doc.html';

// 配置DNS查询缓存路径(可选,减少重复查询开销)
$cacheDir = __DIR__ . '/dns_cache/';
$cacheFile = $cacheDir . md5($currentHost) . '.cache';
$cacheTtl = 3600; // 缓存有效期1小时

$cnameRecords = [];
// 优先读取缓存
if (is_dir($cacheDir) && file_exists($cacheFile) && (time() - filemtime($cacheFile)) < $cacheTtl) {
    $cnameRecords = json_decode(file_get_contents($cacheFile), true) ?: [];
} else {
    // 无缓存时查询DNS的CNAME记录
    $dnsResult = dns_get_record($currentHost, DNS_CNAME);
    if (!empty($dnsResult)) {
        foreach ($dnsResult as $record) {
            if (isset($record['target'])) {
                $cnameRecords[] = strtolower(trim($record['target'], '.'));
            }
        }
    }
    // 写入缓存
    if (is_dir($cacheDir)) {
        file_put_contents($cacheFile, json_encode($cnameRecords));
    }
}

// 匹配到目标CNAME则执行重定向
if (in_array($targetCname, $cnameRecords)) {
    header("Location: {$redirectUrl}", true, 302);
    exit;
}

注意事项

  • 根域名(比如example.com)按照DNS规范通常不能设置CNAME记录,所以该方案主要适用于子域名场景
  • 若服务器配置了hosts绑定对应域名,dns_get_record会优先读取hosts配置,无法获取到公网的CNAME记录
  • DNS查询存在延迟,建议一定要加缓存逻辑,避免每次请求都触发DNS查询拖慢响应速度
  • $_SERVER['HTTP_HOST']是用户请求头携带的内容,生产环境使用建议做白名单校验,避免伪造恶意请求

内容的提问来源于stack exchange,提问作者Peach Studio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:54:02