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

在WordPress站点中如何通过PHP捕获Nginx重写前的原始绑定域名?

可行实现方案

前置校验:确认可获取的原始域名服务器变量

主机商做NGINX内部重写(非3xx跳转)的场景下,通常不会清空原始请求的相关头信息,你可以先通过插件输出PHP超全局变量排查可用字段:

  • 常见的存储原始请求域名的$_SERVER字段包括:
    • $_SERVER['HTTP_X_ORIGINAL_HOST']:多数主机做域名重写时会保留的自定义头,存储原始请求Host
    • $_SERVER['HTTP_HOST']:如果NGINX没有强制覆盖Host头,该字段会直接保留原始请求域名
    • $_SERVER['HTTP_X_FORWARDED_HOST']:反向代理场景下常用的原始Host存储字段
  • 测试代码可以挂在WordPress的init钩子中,仅管理员可见避免影响普通用户:
add_action('init', function() {
    // 仅管理员执行输出
    if (current_user_can('manage_options')) {
        echo '<pre>';
        // 打印所有服务器变量,查找包含你第二个域名的字段键名
        print_r($_SERVER);
        echo '</pre>';
        exit;
    }
});

正式实现:捕获原始域名并做业务处理

排查到对应的存储字段后,你可以封装通用方法全局获取原始域名,用于后续业务逻辑:

/**
 * 获取请求的原始域名
 * @return string 原始域名
 */
function get_original_request_domain() {
    // 替换成你实际排查到的存储原始域名的$_SERVER键名
    $domain_source_keys = [
        'HTTP_X_ORIGINAL_HOST',
        'HTTP_HOST',
        'HTTP_X_FORWARDED_HOST'
    ];
    foreach ($domain_source_keys as $key) {
        if (isset($_SERVER[$key]) && !empty($_SERVER[$key])) {
            $raw_domain = sanitize_text_field($_SERVER[$key]);
            // 过滤掉可能存在的端口号
            return strtok($raw_domain, ':');
        }
    }
    // 兜底逻辑:返回站点默认主域名
    return parse_url(get_home_url(), PHP_URL_HOST);
}

调用get_original_request_domain()即可拿到当前请求的原始域名,后续可以基于该值做内容差异化、链接重写、权限控制等任意业务处理。

特殊场景兼容(NGINX使用3xx跳转的情况)

如果主机商是通过301/302跳转把第二个域名的请求转到主域名,而非内部重写,跳转后的请求不会携带原始头信息,可通过以下方案处理:

  • 如果你能配置第二个域名的跳转规则,可以在跳转时追加参数标记,比如访问second-domain.com/xxx时跳转到main-domain.com/xxx?from_domain=second-domain.com,在插件中获取$_GET['from_domain']后存入用户Cookie或Session,后续请求都可以读取该标记
  • 无法修改跳转规则的话,可以通过$_SERVER['HTTP_REFERER']辅助判断来源域名,该字段可靠性较低,仅可作为补充方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:54:01