HDWiki Nginx 伪静态规则优化

最近把VPS上的Apache替换成了Nginx,效率快了很多,但是有些程序的Nginx伪静态规则没有或是用不了,HDWiki便是之一。HDWiki好久不更新了,官方论坛也是一塌糊涂,提个问题根本没人解决,还是自己解决吧。

下面是官方给出的Nginx伪静态规则,前台页面有效,但是后台页面不正常。

if ($request_filename !~* (.*)\.(css|js|gif|jpg|png|xml)){
rewrite ^(/)(.*)$ $1/index.php?$2;
}

下面是修改过的伪静态规则,增加了判断并排除后台、搜索及php页面。

if ($request_uri !~* (admin|search|.php)){
set $ifbtmp X;
}
if ($request_filename !~* (.*)\.(css|js|gif|jpg|png|xml)){
set $ifbtmp "${ifbtmp}X";
}
if ($ifbtmp = XX){
rewrite ^(/)(.*)$ $1/index.php?$2;
}

希望对你有用。

解决 HDWiki 词条打开慢的 bug

查找了一些资料,问题出在ucenter头像上,有一些修改方法,但是都没有彻底解决问题。

修改前 Processed in 10.012018 second(s). ,抓狂一个页面也执行10秒以上。

/model/ucenter.class.php170行
if(uc_check_avatar($this->base->user["uid"])){
修改为
if($this->base->user["uid"]){

193行
//if(uc_check_avatar($editors[$doc["author"]][uid])){
修改为
if($editors[$doc["author"]][uid]){
下面还有一行

修改后,Processed in 0.028018 second(s), 24 queries.

总而言之,就是整个hdwiki中并没有uc_check_avatar()整个函数。

附上一篇文章:http://blog.sina.com.cn/s/blog_5fd841bf0100psie.html

使用 canonical 标签解决 HDWiki 内容重复问题

不得不说HDWiki是一个问题相当多的程序,论坛人气差,反映的问题往往不能得到很好的解决。

以自己的 淮南百科 为例,在开启伪静态的情况下,同一个词条的链接可能有以下几种:

  1. http://baike.i0554.com/doc-view-273.html
  2. http://baike.i0554.com/doc-innerlink-淮王鱼.html
  3. http://baike.i0554.com/doc-innerlink-肥王鱼.html
  4. baike.i0554.com/?doc-innerlink-淮王鱼
  5. http://baike.i0554.com/doc-view-273

简单分析一下这几个链接:第一个链接是正确的,大多数地方出现的链接都是这个;第二个链接是在相关词条中出现的;第三个链接是在同义词中出现的,链接的形式和第二个一样;第四个链接同前两个类似,是在搜索引擎中用site命令发现的;第五个链接也是在搜索引擎中用site命令发现的。

链接不同而内容相同,这对搜索引擎来说是比较忌讳的,甚至可能会被认为成作弊。个人认为这也是Google等搜索引擎对HDWiki程序的网站不友好的原因之一。

有问题当然要解决问题,下面是我的解决办法:

在模版header.html中添加标签<link rel=”canonical”>

<!–{if $doc[‘did’]}–><link rel=”canonical” href=”{$setting[‘site_url’]}/{url doc-view-$doc[‘did’]}” /><!–{/if}–>

具体效果如何,暂时还不知道,过段时间再观察网站在搜索引擎的表现。

修改完善 HDWiki 的 RSS 输出

hdwiki确实是一款不错的wiki程序,基于MVC开发,扩展性很强,定制起来非常方便。

一、解决最新词条没有标题的bug

control/list.php 136行开始,在中间添加上最新词条的相关代码 recentupdate….

function dorss(){
if($this->get[2]){
switch($this->get[2]){
case 'recentupdate':
$typename = '最新词条';
break;
case 'focus':
$typename = '推荐词条';
break;
case 'hot':
$typename = '热门词条';
break;
case '':
$typename = '精彩词条';
break;
}

继续阅读