默认情况下,DedeCMS 生成的 Sitemap(网站地图)文件中的链接是相对路径(about.html),这对于搜索引擎(如 Google、百度)的抓取来说是不友好的,因为它们需要完整的 https://www.yourdomain.com/about.html 这样的绝对路径才能正确识别和收录。

下面我将提供两种最常用且有效的方法,确保您能成功设置。
修改 sitemap.php 源码(最推荐、最彻底)
这是最直接、最稳定的方法,通过修改 DedeCMS 核心生成 Sitemap 的文件,让它在生成时就带上网站的域名。
操作步骤:
-
找到文件 登录您的网站 FTP 或主机控制面板,找到并下载以下文件:
你的网站根目录/plus/sitemap.php
(图片来源网络,侵删) -
编辑文件 用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开
sitemap.php文件。 -
修改代码 在文件中找到定义网站基本信息的代码段,通常在文件的开头部分,类似这样:
// ... 其他代码 ... $type = isset($type) ? trim($type) : ''; $typeid = isset($typeid) ? intval($typeid) : 0; $siteurl = $cfg_basehost; // 这里是获取网站根目录的变量 // ... 其他代码 ...
您需要确保
$cfg_basehost变量包含了完整的http://或https://,有时候这个变量可能没有包含协议,或者为空,我们可以手动给它赋值,以确保万无一失。找到类似下面这行代码:
(图片来源网络,侵删)$siteurl = $cfg_basehost;
将其修改为(推荐写死域名,避免因配置问题出错):
// 将你的域名替换成你自己的,确保包含 https:// $siteurl = 'https://www.yourdomain.com/';
或者,如果不想写死,也可以使用以下更健壮的方式:
// 获取当前网站的协议和域名,自动适应 http 和 https $siteurl = 'http://'. $_SERVER['HTTP_HOST'] . '/'; // 如果网站强制使用 HTTPS,可以强制设置 // $siteurl = 'https://'. $_SERVER['HTTP_HOST'] . '/';
-
保存并上传 修改完成后,保存文件,然后通过 FTP 将其上传回原来的位置,覆盖原文件。
-
重新生成 Sitemap 登录 DedeCMS 后台,进入“栏目管理” -> “自动栏目”,在页面底部找到“更新Sitemap”按钮,点击它重新生成 Sitemap 文件。
新生成的 sitemap.xml 文件中的所有链接都会是完整的绝对路径了。
使用 Nginx/Apache 的 rewrite 规则(优雅的解决方案)
如果您不想修改 DedeCMS 的源码,或者希望保持源码的纯净,可以使用 Web 服务器(Nginx 或 Apache)的重写规则,将相对路径的 Sitemap 动态地转换为绝对路径。
原理: 当搜索引擎请求 sitemap.xml 时,Web 服务器在输出内容前,将文件中的所有 开头的相对路径替换成您的完整域名。
针对 Nginx 服务器
-
找到配置文件 编辑您网站的 Nginx 配置文件,通常位于
/etc/nginx/nginx.conf或站点配置文件/etc/nginx/sites-available/yourdomain.com。 -
添加
sub_filter指令 在server块中添加以下配置:server { listen 80; server_name www.yourdomain.com; root /path/to/your/website; # ... 其他配置 ... # 添加这段配置来处理 sitemap.xml location = /sitemap.xml { # 将请求代理给 PHP 处理 fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # 请根据您的PHP-FPM配置修改 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; # 使用 sub_filter 进行内容替换 sub_filter 'href="/' 'href="https://www.yourdomain.com/'; # 替换为你的域名 sub_filter 'url="/' 'url="https://www.yourdomain.com/'; # 替换为你的域名 sub_filter_once off; # 对所有匹配项都进行替换 } # ... 其他配置 ... } -
重启 Nginx 保存配置文件后,执行以下命令重启 Nginx 使配置生效:
sudo systemctl restart nginx
针对 Apache 服务器
-
创建或编辑
.htaccess文件 在您的网站根目录下找到.htaccess文件,如果不存在就创建一个。 -
添加
mod_proxy_html和mod_substitute规则 确保您的 Apache 已经加载了mod_proxy_html和mod_substitute模块,然后在.htaccess文件中添加以下规则:# 启用必要的模块 <IfModule mod_proxy_html.c> <IfModule mod_substitute.c> # 将针对 sitemap.xml 的请求交给 PHP 处理 RewriteEngine On RewriteRule ^sitemap\.xml$ /plus/sitemap.php [L] # 使用 Substitute 模块进行内容替换 # 需要开启 mod_proxy_html 和 mod_substitute # 这部分配置可能更复杂,通常建议使用方法一或Nginx方案 # 以下是一个示例,可能需要根据实际情况调整 <Files "sitemap.xml"> ProxyPass ! # 这是一个简化的思路,实际操作中可能需要更复杂的规则或借助PHP处理 # 对于Apache,方法一通常是更简单可靠的选择 </Files> </IfModule> </IfModule>注意:Apache 的
mod_substitute模块在处理这类替换时不如 Nginx 的sub_filter灵活和直接,对于 Apache 环境,强烈推荐使用方法一(修改源码),它更简单、更可靠。
总结与建议
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
修改 sitemap.php |
简单直接、效果稳定、不依赖服务器配置 | 需要修改核心文件,升级时可能需要重复修改 | ★★★★★ (最推荐) |
| 服务器重写 | 不修改源码,保持系统纯净 | 配置复杂,对服务器环境有要求,可能不稳定 | ★★★☆☆ (适合熟悉服务器配置的用户) |
最终建议:
对于绝大多数用户来说,方法一(修改 sitemap.php)是最佳选择,它一次性解决问题,且非常可靠,您只需要记住,在未来如果升级 DedeCMS,这个修改可能会被覆盖,届时您需要重新进行一次修改。
修改完成后,务必重新生成 Sitemap,然后使用 Google Search Console 或百度站长工具提交您的 Sitemap,并检查一下文件内容,确认链接都已变成绝对路径。
