在使用Dedecms作为软件下载站点时,可能会遇到一些问题。例如,当其他网站转载您的下载链接时,直接指向`http://www.xxx.com/plus/download.php...`这样的地址,不仅会耗费服务器资源,还无法为您的网站带来流量。为了防止这种情况发生,可以通过修改代码实现防盗链功能。 ### 防盗链功能的实现 改后的功能如下: - 假设软件信息页地址为`/soft/1.htm`。 - 下载地址连接为`/plus/download.php?...`。 - 系统将判断访问来源: - 如果不是从`/soft/1.htm`进入,则直接跳转到`/soft/1.htm`。 - 如果是从`/soft/1.htm`进入,则正常展示下载地址。 以下是如何实现这一功能的详细步骤:



GetOne($gquery);
if(is_array($arcRow)){
    $arctitle = $arcRow['title'];
    $arcurl = GetFileUrl($aid,$arcRow['typeid'],$arcRow['senddate'],$arctitle,$arcRow['ismake'],$arcRow['arcrank'],$arcRow['namerule'],$arcRow['typedir'],$arcRow['money']);
}else{
    $dsql->Close();
    ShowMsg("无法获取未知文档的信息!","-1");
    exit();
}

$cu = new ChannelUnit($arcRow['channel'],$aid);
if(!is_array($cu->ChannelFields)) {
    $cu->Close();
    $dsql->Close();
    ShowMsg("获取文档链接信息失败!","-1");
    exit();
}

$vname = "";
foreach($cu->ChannelFields as $k=>$v){
    if($v['type']=="softlinks"){ $vname=$k; break; }
}

if(!is_array($cu->ChannelFields)) {
    $cu->Close();
    $dsql->Close();
    ShowMsg("获取文档链接信息失败!","-1");
    exit();
}

if(!strstr($_SERVER['HTTP_REFERER'],$arcurl)){
    echo "";
}

$row = $dsql->GetOne("Select $vname From ".$cu->ChannelInfos['addtable']." where aid='$aid'");
$downlinks = $cu->GetAddLinks($row[$vname]);
$dsql->Close();
$cu->Close();

$link = base64_decode($link);
$thunderUrl = ThunderEncode($link);
echo "";
?>





<?php echo $arctitle?>下载地址列表




下载 返回主页
软件名称:
下载地址列表:

### 注意事项 1. **软件频道设置** 在Dedecms后台的软件频道设置中,需要将“链接显示方式”设置为“要求进入下载地址列表页”。 2. **手动修改`download.php`** 如果上述情况与您的实际需求不符,可以手动修改`/plus/download.php`文件。具体方法如下: 找到以下代码段: `
` `$row = $dsql->GetOne("Select $vname From ".$cu->ChannelInfos['addtable']." where aid='$aid'");` `
` 在其上方添加以下代码: `
` `if(!strstr($_SERVER['HTTP_REFERER'],$arcurl)) {` ` echo "";` `}` `
` 通过以上步骤,您可以有效防止他人直接转载您的下载链接,从而保护您的服务器资源和流量。希望这些信息对您有所帮助!