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

单代码库多站点的域名访问限制与跳转实现及PHP代码咨询

域名访问限制与跳转实现方案

首先修正你原代码的两个关键问题:

  • elseif语句末尾多了分号,会导致后续代码块不受条件控制
  • $_SERVER['HTTP_REFERER']返回的是完整来源URL(如https://cde.com/article.php),直接判断等于域名会匹配失败,需要先提取域名部分

辅助函数:提取URL中的域名

先写一个工具函数,用来从URL中提取主域名,兼容带协议、路径的情况:

function getDomainFromUrl($url) {
    // 解析URL
    $parsedUrl = parse_url($url);
    if (!isset($parsedUrl['host'])) {
        return false;
    }
    // 返回主机域名(如abc.com、cde.com)
    return $parsedUrl['host'];
}

完整实现代码

<?php
function getDomainFromUrl($url) {
    $parsedUrl = parse_url($url);
    if (!isset($parsedUrl['host'])) {
        return false;
    }
    return $parsedUrl['host'];
}

// 获取当前站点的域名
$currentDomain = $_SERVER['HTTP_HOST'];
// 获取来源域名
$refererDomain = isset($_SERVER['HTTP_REFERER']) ? getDomainFromUrl($_SERVER['HTTP_REFERER']) : false;

// 功能一:限制cde.com访问abc.com(即当当前是abc.com,且来源是cde.com时,拒绝访问)
if ($currentDomain === 'abc.com' && $refererDomain === 'cde.com') {
    // 输出403禁止访问,或直接终止脚本
    http_response_code(403);
    echo '禁止从cde.com访问本站点';
    exit;
}

// 功能二:当来源为cde.com时,跳转至abc.com(即用户从cde.com跳过来时,重定向到abc.com)
if ($refererDomain === 'cde.com') {
    // 使用header函数跳转,注意要在输出任何内容之前调用
    header('Location: https://abc.com');
    exit;
}
?>

代码说明

  • 提取域名:通过parse_url解析URL,获取主机部分,确保能正确识别来源域名
  • 访问限制:判断当前站点是abc.com且来源是cde.com时,返回403状态码并终止脚本,阻止访问
  • 跳转功能:当检测到来源是cde.com时,使用header('Location: ...')发送重定向指令,配合exit确保脚本停止执行

注意事项:

  • $_SERVER['HTTP_REFERER']可能被浏览器或代理隐藏,不能作为唯一的验证依据,若需要更严格的限制,可结合IP或会话验证
  • header函数必须在任何HTML输出之前调用,否则会报错,确保代码放在页面最顶部

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:31:02