dedecms织梦跳转终极修改:使用自定义文件名,外链伪静态和新浪微博一样,适合做淘宝客、外链推广等网站
最近用dedecms做了好多站,在仿一个外国的索引一样的外链站时候,跳转需要优化一下,网上看了很多文章,都是用view-开头的,不够好,如果要用自定义文件名作为跳转地址,dedecms如果做呢。该站外观功能如图所示:
如上图,比较简单,列表页是/r/LMFTQM这样的跳转链接,没有详情页。
做好的站外链也差不多,而且/r也去掉了。默认的跳转链接不是这样的,必须要改一下程序。
现在说一下终极修改方法,我用的是dede5.7utf8版的,其他版本可能要变通一下:
首先,要到系统--系统基本参数--核心设置里面把是否使用伪静态开启,这样[field:arcurl/]才会使用静态化的文章地址。
接着,打开include\helpers\channelunit.helper.php找到下面的if语句改成这样:
//作者:apple0280 //qq:71780795 //博客园:http://www.cnblogs.com/kuhp/ //电子邮件:71780795@qq.com 1 //动态文章 2 if($cfg_rewrite == 'Y') 3 { 4 //return $GLOBALS["cfg_plus_dir"]."/view-".$aid.'-1.html'; 5 $dsql = new DedeSql(false); 6 $dsql->SetQuery("SELECT filename FROM #@__archives WHERE id=".$aid); 7 $dsql->Execute(); 8 $co=0; 9 $row=$dsql->GetOne(); 10 $filename=$row['filename']; 11 $dsql->SetQuery("SELECT * FROM #@__archives WHERE flag='j' and filename='".$filename."'"); 12 $dsql->Execute(); 13 $row2=$dsql->GetTotalRow(); 14 if($filename&&$row2==1) return '/'.$filename; 15 else return "/view-".$aid; 16 }
原来的地址是:/plus/view-1-1.html
现在解析成你在文章里设定的/LMFTQM,只要自定义文件名写上LMFTQM,如果跳转文章里的自定义文件名重复或者为空,则采用/view-1作为路径。
显示层就做好了,现在应用层:
我们要改一下根目录的伪静态文件,lunix的.htaccess我是这样的:
//作者:apple0280 //qq:71780795 //博客园:http://www.cnblogs.com/kuhp/ //电子邮件:71780795@qq.com 1 <IfModule mod_rewrite.c> 2 RewriteEngine On 3 RewriteCond %{http_host} ^cbankmall.com [NC] 4 RewriteRule ^(.*)$ http://www.cbankmall.com/$1 [L,R=301] 5 RewriteRule ^list-([0-9]+)\.html$ /plus/list.php?tid=$1 6 RewriteRule ^list-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /plus/list.php?tid=$1&totalresult=$2&PageNo=$3 7 RewriteRule ^view-([0-9]+)-1\.html$ /plus/view.php?aid=$1 8 RewriteRule ^view-([0-9]+)$ /plus/view.php?aid=$1 9 RewriteRule ^([0-9a-zA-Z\-\_]+)$ /plus/view.php?f=$1 10 RewriteRule ^view-([0-9]+)-([0-9]+)\.html$ /plus/view.php?aid=$1&pageno=$2 11 RewriteRule ^sitemap\.xml$ /sitemap.php 12 </IfModule>
如果是iis,httpd.ini可以这样写(暂未验证正确性):
1 [ISAPI_Rewrite] 2 # 缓存3600秒 = 1 小时(hour) 3 CacheClockRate 3600 4 RepeatLimit 32 5 #dedecms Rewrite规则 6 #RewriteRule ^(.*)/index\.html $1/index\.php 7 RewriteRule ^(.*)/list-([0-9]+)\.html $1/plus/list\.php\?tid=$2 8 RewriteRule ^(.*)/list-([0-9]+)-([0-9]+)-([0-9]+)\.html $1/plus/list\.php\?tid=$2&TotalResult=$3&PageNo=$4 9 RewriteRule ^(.*)/view-([0-9]+)-1\.html $1/plus/view\.php\?aid=$2 10 RewriteRule ^(.*)/view-([0-9]+) $1/plus/view\.php\?aid=$2 11 RewriteRule ^(.*)/([0-9a-zA-Z-_]+) $1/plus/view\.php\?aid=$2 12 RewriteRule ^(.*)/view-([0-9]+)-([0-9]+)\.html $1/plus/view\.php\?aid=$2&pageno=$3 13 RewriteRule ^(.*)/sitemap\.xml $1/sitemap\.php
这里注意,list那几行我的站没用到,因为列表的栏目我链接到默认页,没有使用动态页。
然后,我要用/plus/view.php解析。打开这个文件改一下:
在require_once(DEDEINC.'/arc.archives.class.php');
后面加上以下几行代码:
1 //作者:apple0280 2 //qq:71780795 3 //博客园:http://www.cnblogs.com/kuhp/ 4 //电子邮件:71780795@qq.com 5 if($f){ 6 $dsql = new DedeSql(false); 7 $dsql->SetQuery("SELECT id FROM #@__archives WHERE flag='j' and filename='".$f."'"); 8 $dsql->Execute(); 9 $row=$dsql->GetOne(); 10 if($row['id'])$aid = $arcID=$row['id']; 11 }
这时候就可以看到http://www.yishile.com/LMFTQM这样的链接。
到此,大功告成了,有问题大家可以留言。