Discuz教程网

[代码修改] 论坛防止AD【自动屏蔽外部连接】,论坛URl跳转完美无错版FOR Discuz7.0&7.1

[复制链接]
authicon dly 发表于 2011-9-21 08:35:23 | 显示全部楼层 |阅读模式
论坛有很多恶意发广告的ID十分的招人烦,有时候一些被搜索引擎惩罚的网站链接出现在自己论坛,就会对论坛的排名有所影响,所以我一直在寻找实现屏蔽外部链接的功能。测试地址:http://www.y0597.cn/thread-2349-1-1.html可以直接点击链接,本站已经用了此插件(论坛URl跳转完美无错版FOR Discuz7.0)!

很可惜官方没有给出一个完整的方案,好像只说过关闭掉DZCODE(DZ代码),那多得不偿失呀。
所以我就模仿DEDECMS的论坛还有PHPWIND的代码,修改了一下,用着还不错。

首先需要修改的是include文件夹下的discuzcode.func.php
  1. function parseurl($url, $text) {
复制代码

然后将其整个function替换为
  1. function parseurl($url, $text) {
  2. if(!$url && preg_match("/((https?|ftp|gopher|news|telnet|rtsp|mms|callto|bctp|ed2k|thunder|synacast){1}:\/\/|www\.)[^\["']+/i", trim($text), $matches)) {
  3. $url = $matches[0];
  4. $length = 65;
  5. if(strlen($url) > $length) {
  6. $text = substr($url, 0, intval($length * 0.5)).' ... '.substr($url, - intval($length * 0.3));
  7. }
  8. if($url == str_replace("y0597.cn","",strtolower($url))){ //检测为外部站点
  9. if(substr(strtolower($url), 0, 7) == 'http://') {
  10. $url = 'http://www.y0597.cn/goto.php?url='.base64_encode($url);
  11. }elseif(substr(strtolower($url), 0, 4) == 'www.') {
  12. $url = 'http://www.y0597.cn/goto.php?url='.base64_encode('http://'.$url);
  13. }
  14. } else { //否则就为自身站点
  15. if(substr(strtolower($url), 0, 4) == 'www.') {
  16. $url = 'http://'.$url;
  17. }
  18. }
  19. return '<a href="'.$url.'" target="_blank">'.$text.'</a>';
  20. } else {
  21. $url = substr($url, 1);
  22. if($url == str_replace("y0597.cn","",strtolower($url))){ //检测为外部站点
  23. if(substr(strtolower($url), 0, 7) == 'http://') {
  24. $url = 'http://www.y0597.cn/goto.php?url='.base64_encode($url);
  25. }elseif(substr(strtolower($url), 0, 4) == 'www.') {
  26. $url = 'http://www.y0597.cn/goto.php?url='.base64_encode('http://'.$url);
  27. }
  28. } else { //否则就为自身站点
  29. if(substr(strtolower($url), 0, 4) == 'www.') {
  30. $url = 'http://'.$url;
  31. }
  32. }
  33. return '<a href="'.$url.'" target="_blank">'.$text.'</a>';
  34. }
  35. }
复制代码

大家需要将里面的www.y0597.cn替换为自己的域名。
然后还要将str_replace("y0597.cn","",strtolower($url))中的y0597.cn替换你域名的主体部分。
比如你的域名是bbs.y0597.com,那么就是str_replace("y0597.com","",strtolower($url))。
正是这条语句来判断链接是否为外部的地址。

我来解释一下:

如果发现一个链接是外部的站点就通过检测前几个字符获得其完整的访问地址,并作为自身站点一个转向文件(goto.php)的参数。
如果发现这个链接是自身的站点就通过检测前几个字符获得其完整的访问地址。

并且将外部链接地址使用了BASE64加密处理。

当然还有GOTO.PHP文件
  1. <html>
  2. <head>
  3. <meta http-equiv=Content-Type content="text/html;charset=gb2312">
  4. <title>页面正在跳转中 - 龙盛创想论坛 - 原龙岩信息网</title>
  5. <meta http-equiv="refresh" content="3;url=<?php echo base64_decode($url) ?>">
  6. </head>
  7. <body>
  8. <p>在3秒后自动跳转至下面这个网址,请确定网址是否安全<p>
  9. <p>【<?php echo str_replace("http://","",base64_decode($url)) ?>】</p>
  10. <p><a href="<?php echo base64_decode($url) ?>">点击此处立即打开链接</a><p>
  11. </body>
  12. </html>
复制代码

我再来解释一下:

很简单的HTML页面,需要说的就是<?php echo str_replace("http://","",base64_decode($url)) ?>
这条语句将网址中的http://字符给去掉了,主要是为了美观。当然你也可以还原其本来面目。
<?php echo base64_decode($url) ?>即可。


原作者是用于DZ6.1的 站长发现用在DZ7.0 发帖会出错,看帖也会出错,于是稍微修改了下DZ7.0的include文件夹下的discuzcode.func.php  成功运用到了7.0上 看不懂以上说明的可以回复本贴后 下载附件(论坛URl跳转完美无错版FOR Discuz7.0.rar),把discuzcode.func.php覆盖到include文件夹下的discuzcode.func.php ,把goto.php上传到论坛根目录即可完美实现用跳转的方法屏蔽外链和AD
论坛URl跳转完美无错版FOR Discuz7.0.zip (7.16 KB, 下载次数: 0)



上一篇:Discuz X2 自动顶贴回帖插件,快速火爆你的站点
下一篇:DZX2免费语音视频文字聊天室插件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-3 00:26

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表