使用 DedeCMS 全局变量(推荐)
DedeCMS 在全局中定义了一个非常重要的变量 $cfg_basehost,它专门用来存储网站的基础域名,www.example.com,这个变量在系统初始化时就已经设置好了,是获取域名的最标准、最可靠的方式。

(图片来源网络,侵删)
代码示例:
<?php // 获取当前域名(不包含协议,如 www.example.com) $domain = $cfg_basehost; // 输出结果 echo $domain; ?>
完整示例(在模板文件中使用):
假设你想在首页的 <head> 部分输出一个 canonical 标签,可以使用以下代码:
在 templets/default/head.htm 文件中找到 <head> 标签,在里面添加:
<link rel="canonical" href="<?php echo $cfg_basehost; ?>/"/>
这样就会输出类似 <link rel="canonical" href="http://www.example.com/"/> 的代码。
使用 PHP 原生 $_SERVER 超全局变量
你也可以直接使用 PHP 的 $_SERVER 超全局变量来获取域名信息,这比 $cfg_basehost 更底层,也更灵活,但需要注意一些细节。

(图片来源网络,侵删)
常用的 $_SERVER 键值:
$_SERVER['HTTP_HOST']:获取当前请求的 Host 头部信息,这是最常用也是最直接获取当前域名的方式,它通常包含端口号(www.example.com:8080)。$_SERVER['SERVER_NAME']:获取服务器配置中定义的主机名,通常和HTTP_HOST一致,但在某些情况下(比如通过 IP 访问)可能会有所不同。$_SERVER['REQUEST_URI']:获取当前请求的 URI(路径和查询字符串),/index.php?cat=1。
代码示例:
<?php // 1. 获取 HTTP_HOST(推荐) $http_host = $_SERVER['HTTP_HOST']; echo $http_host; // 输出: www.example.com 或 www.example.com:8080 // 2. 获取 SERVER_NAME $server_name = $_SERVER['SERVER_NAME']; echo $server_name; // 输出: www.example.com // 3. 获取完整的 URL(包含协议) $full_url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; echo $full_url; // 输出: http://www.example.com/index.php ?>
如何处理带端口号的域名?
如果你使用 $_SERVER['HTTP_HOST'] 并且不想包含端口号,可以使用 explode() 函数来处理:
<?php
$http_host = $_SERVER['HTTP_HOST'];
$domain = explode(':', $http_host)[0]; // 按 ':' 分割并取第一部分
echo $domain; // 无论输入是 www.example.com 还是 www.example.com:8080,都输出 www.example.com
?>
方法对比与选择
| 特性 | $cfg_basehost (DedeCMS) |
$_SERVER['HTTP_HOST'] (PHP) |
|---|---|---|
| 来源 | DedeCMS 系统全局变量,由系统配置决定。 | PHP 超全局变量,由当前 HTTP 请求决定。 |
| 可靠性 | 高,它基于你在 DedeCMS 后台设置的“站点根网址”,不受用户输入或复杂 URL 重写的影响。 | 中等,直接来自请求,可能被伪造(虽然不常见),也可能包含端口号。 |
| 易用性 | 非常简单,直接使用,无需额外处理。 | 灵活,但可能需要额外代码(如去除端口号)。 |
| 适用场景 | 绝大多数情况,尤其是在模板文件、PHP 文件中需要获取网站基础域名时,这是最佳选择。 | 当你需要获取当前请求的精确 Host(比如处理多端口服务)或者不依赖 DedeCMS 环境时。 |
- 在 DedeCMS 模板(.htm 文件)或 PHP 文件中需要获取网站域名时,请优先使用
$cfg_basehost。 这是最符合 DedeCMS 设计规范、最稳定可靠的方法。 - 如果你需要获取当前请求的、可能包含端口号的精确主机名,或者在进行一些与 HTTP 请求细节相关的开发时,可以使用
$_SERVER['HTTP_HOST']。
对于你的问题“dede获取当前域名”,答案就是 $cfg_basehost。

(图片来源网络,侵删)
