首页 > 代码库 > discuz X3.1的门户文章实现伪静态,利于搜索引擎收录url的地址修改
discuz X3.1的门户文章实现伪静态,利于搜索引擎收录url的地址修改
最近在捣鼓DZ框架,这两天发现文章的收录情况并不是太理想,做了很多优化方面的工作,今天主要解决了DZ门户的文章链接伪静态化,在这次修改之前,也做过一次在网上找的静态化修改,之前做的方式是:
1.在DZ管理后台->全局->seo设置->url静态化模块中,开启如下配置
2.在nginx的配置文件中,添加url的rewrite规则如下图,添加完规则后,在门户首页和频道列表中显示的url规则是:http://xxx.com/article-aid-page.html;其中aid是文章id,page默认都显示成了1,因为我的大部分文章基本就一页,这样的显示方式感觉怪怪的,所有的文章url几乎都显示成http://xxx.com/article-aid-1.html的形式,这种url显示既没有栏目列表页又有一个多余的页码page,从seo的角度考虑,这种url显示非常不利于百度搜索引擎的抓取,本身百度搜索引擎对dz的收录一直不太理想,就算百度抓取后,想通过这个链接返回到上一层,那只能是http://xxx.com/了,也就是你的首页了
1 2 3 4 5 6 7 | rewrite ^([^\.]*)/topic-(.+)\.html$ $1/portal.php?mod=topic&topic=$2 last; rewrite ^([^\.]*)/article-([0-9]+)-([0-9]+)\.html$ $1/portal.php?mod=view&aid=$2&page=$3 last; rewrite ^([^\.]*)/(\w+)/([0-9]+)\.html$ $1/portal.php?mod=view&aid=$3 last; rewrite ^([^\.]*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3 last; rewrite ^([^\.]*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=viewthread&tid=$2&extra=page%3D$4&page=$3 last; rewrite ^([^\.]*)/ group -([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod= group &fid=$2&page=$3 last; rewrite ^([^\.]*)/space-(username|uid)-(.+)\.html$ $1/home.php?mod=space&$2=$3 last; |
以前修改的discuz的门户url伪静态就是上面的显示形式,今天又研究了discuz的东西,最终实现了http://xxx.com/catname/aid.html,因为我的站点的文章都是一页,也就暂时没有考虑增加页码的实现(比如:http://xxx.com/catname/adi-page.html),这个以后用到的时候在研究吧,下面就说一下我的实现方式:
1.通过分析,在频道列表模板(/template/default/portal/list.htm)中有如下代码进行数据的展示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <!--{loop $list[ ‘list‘ ] $value}--> <!--{eval $highlight = article_title_style($value);}--> <!--{eval $article_url = <strong><span style= "color: rgb(255, 0, 0);" >fetch_article_url($value);}</span></strong>--> <dl class = "bbda cl" > <dt class = "xs2" ><a href=http://www.mamicode.com/ "$article_url" target= "_blank" class = "xi2" $highlight>$value[title]</a> <!--{ if $value[status] == 1}-->({lang moderate_need})<!--{/ if }--></dt> <dd class = "xs2 cl" > <!--{ if $value[pic]}--><div class = "atc" ><a href=http://www.mamicode.com/ "$article_url" target= "_blank" ><img src=http://www.mamicode.com/ "$value[pic]" alt= "$value[title]" class = "tn" /></a></div><!--{/ if }--> $value[summary] </dd> <dd> <!--{ if $value[catname] && $cat[subs]}-->{lang category}: <label><a href=http://www.mamicode.com/ "{$portalcategory[$value[‘catid‘]][‘caturl‘]}" class = "xi2" >$value[catname]</a></label> <!--{/ if }--> <span class = "xg1" > $value[dateline]</span> <!--{ if $_G[ ‘group‘ ][ ‘allowmanagearticle‘ ] || ($_G[ ‘group‘ ][ ‘allowpostarticle‘ ] && $value[ ‘uid‘ ] == $_G[ ‘uid‘ ] && (empty($_G[ ‘group‘ ][ ‘allowpostarticlemod‘ ]) || $_G[ ‘group‘ ][ ‘allowpostarticlemod‘ ] && $value[ ‘status‘ ] == 1)) || $categoryperm[$value[ ‘catid‘ ]][ ‘allowmanage‘ ]}--> <span class = "xg1" > <span class = "pipe" >|</span> <label><a href=http://www.mamicode.com/ "portal.php?mod=portalcp&ac=article&op=edit&aid=$value[aid]" >{lang edit}</a></label> <span class = "pipe" >|</span> <label><a href=http://www.mamicode.com/ "portal.php?mod=portalcp&ac=article&op=delete&aid=$value[aid]" id= "article_delete_$value[aid]" onclick= "showWindow(this.id, this.href, ‘get‘, 0);" >{lang delete}</a></label> </span> <!--{/ if }--> </dd> </dl> <!--{/loop}--> |
其中fetch_article_url()这个函数是用来输出文章url的,此函数在文件/source/function/function_portal.php中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | function fetch_article_url($article) { global $_G; if (!empty($_G[ ‘setting‘ ][ ‘makehtml‘ ][ ‘flag‘ ]) && $article && $article[ ‘htmlmade‘ ]) { if (empty($_G[ ‘cache‘ ][ ‘portalcategory‘ ])) { loadcache( ‘portalcategory‘ ); } $caturl = ‘‘ ; if (!empty($_G[ ‘cache‘ ][ ‘portalcategory‘ ][$article[ ‘catid‘ ]])) { $topid = $_G[ ‘cache‘ ][ ‘portalcategory‘ ][$article[ ‘catid‘ ]][ ‘topid‘ ]; $caturl = $_G[ ‘cache‘ ][ ‘portalcategory‘ ][$topid][ ‘domain‘ ] ? $_G[ ‘cache‘ ][ ‘portalcategory‘ ][$topid][ ‘caturl‘ ] : ‘‘ ; } return $caturl.$article[ ‘htmldir‘ ].$article[ ‘htmlname‘ ]. ‘.‘ .$_G[ ‘setting‘ ][ ‘makehtml‘ ][ ‘extendname‘ ]; } else {<br><strong><span style= "color: rgb(0, 0, 255);" > //add new start</span></strong> <strong><span style= "color: rgb(0, 0, 255);" > $caturl = getportalcategoryurl($article[ ‘catid‘ ]); $arcturl = $caturl.$article[ ‘aid‘ ]. ".html" ; return $arcturl;<br> //add new end<br></span></strong><strong><span style="color: rgb(255, 0, 0);">// return ‘portal.php?mod=view&aid=‘.$article[‘aid‘];</span> </strong> } } |
红色是框架自带的代码,蓝色是增加的代码,蓝色部分的作用就是通过catid获取到频道的地址,之后再拼接上文章的id.
2.修改完上面代码后,我发现频道列表页中的文章地址已经自动更换为http://xxx.com/catname/aid.html。点击访问出现404,出现404说明资源不存在或者url地址错误,接下来我们需要修改一下nginx中rewrite的规则如下,修改完重启nginx,在访问刚才的文章地址,一切正常,说明已经修改成功了。
1 2 | #rewrite ^([^\.]*)/article-([0-9]+)\.html$ $1/portal.php?mod=view&aid=$2 last; //注释掉的是以前url重写规则 rewrite ^([^\.]*)/(\w+)/([0-9]+)\.html$ $1/portal.php?mod=view&aid=$3 last; //新规则 |
3.有些人可能是DIY的门户首页,这时在diy模块中的文章地址还是http://xxx.com/artcile-aid-page.html,说明刚才的修改对diy模板不起作用。discuz现在的功能做的真是强大,不得不让人佩服,修改diy模板的显示非常的方便,如下标红处是我的修改,修改之前是{url},我们只需要把你每一个diy模板这块的地方都修改成{caturl}{id}.html,更新后,在访问试试看,是不是已经完全解决了。
因为这次只修改了门户的文章url的规则,也没有做过多的测试,不知是否有遗漏,不过我大概点了页面上所有的显示文章的地方,没有出问题。说明这次修改还是有用的。