最新消息:伪静态技术大全博客开通啦!再也不为伪静态东奔西走!更多问题可以反映给博主:野狼,QQ1615241386 QQ交流群:112696646

discuz伪静态配置

伪静态规则实例 野狼 1809浏览

discuz伪静态配置并不是一个特别难的事情,因为官方已经提供的有伪静态规则,但是很多人其实还是不太会弄。所以这里就给大家说一个普遍的步骤:

第一步:确定自己主机是什么伪静态环境

比如说,使用的是IIS7.5的伪静态插件,那就应该配置web.config;

使用的apache的伪静态功能,那就是.htaccess的文件;

使用的Nginx伪静态功能,那就是httpd.conf文件,当然这个名字可以自己改变,另外西部数码助手里也可以配置httpd.conf文件,但是用的是.htaccess规则,要注意。

第二步:找discuz伪静态规则

伪静态博客(http://www.weijingtai.org/)已经写过《各系统(Apache、Nginx、IIS各版本)wordpress伪静态规则总结》,网址是http://www.weijingtai.org/rule/p195.html 感兴趣的可以去查看使用,这里不再赘述。

第三步:看是否生效,如果局部生效,有些不行就单个改变规则,如果全部不生效就检查是否支持这个规则

因为主机环境比较复杂,很多时候配置之后不生效,或者主机环境出现异常,要仔细检查并调整伪静态规则。

 

一、discuz伪静态配置实现把论坛放到二级目录里的解决方案(转):

至于为什么这么建呢,据说是因为/bbs的形式,如果bbs权重起来可以带动主域名的权重。我觉得简单的理解,可能对搜索引擎而言,/bbs的形式就与我们在wordpress新建个分类目录没大区别。而bbs.****.com则完全是一个新的域名。

采用二级目录建站,就要求主目录网站与二级目录的网站都得放在同一个主机里。因为www.****.com/bbs是无法单独解析的。正是因为这个原因,我把博客搬家到了vultr上。也因为数据库表的格式问题,导致我那天搬家一直恢复不成功,要看八卦的可以看《罪魁祸首竟然是他》。

我不知道是不是大多数vps环境都默认只设置主域名的伪静态。比如我在用LNMP一键安装包时,会要求选择伪静态规则

LNMP伪静态选择

AMH的后台安装完rewrite的模块后,也有伪静态的选择。

但不管是LNMP还是AMH的,网站二级目录下的伪静态是没有的,需要自己去修改。我也是在网上找了好多文章搞定了这件事情。一方面也是因为我对VPS不熟悉,另外一方面也是写的人都写的太含糊了点。

解决方案

比如www.***.com已经实现伪静态,而我在想在bbs目录再安装一个discuz或者其它程序(比如:www.***.com/bbs),那么默认的伪静态规则是不会继承的,我们需要引入新的规则来实现。

一、新建rewrite规则,复制下面的规则然后另存为discuz2.conf

location /bbs/ {
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 ^([^\.]*)/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;
rewrite ^([^\.]*)/blog-([0-9]+)-([0-9]+)\.html$ $1/home.php?mod=space&uid=$2&do=blog&id=$3 last;
rewrite ^([^\.]*)/(fid|tid)-([0-9]+)\.html$ $1/index.php?action=$2&value=$3 last;
rewrite ^([^\.]*)/([a-z]+[a-z0-9_]*)-([a-z0-9_\-]+)\.html$ $1/plugin.php?id=$2:$3 last;
if (!-e $request_filename) {
return 404;
}
}

如果不会新建,那也可以把vps里原先就存在的伪静态规则文件复制一份进行修改。不管是AMH的还是LNMP的都是自带discuz的规则的。

二、将创建的discuz2.conf存放至服务器/usr/local/nginx/conf/rewrite目录中

三、打开/usr/local/nginx/conf/vhost目录,找到网站的配置文件,比如我的是52zd.com.conf在server{}引入新增的discuz2.conf文件。

原先是

include wordpress.conf;

修改为

include wordpress.conf;

include discuz2.conf;

然后保存并覆盖,如果怕改错,建议先备份。

四、重启VPS就可以了

 

二、Discuz!论坛分区版块(gid)伪静态处理的方法

在做完Discuz!论坛全站伪静态(Discuz!论坛全站伪静态方法)之后,古惑仔网发现一个问题,就是分区版块的链接并没有被静态化,还是下面这种格式:/forum.php?gid=1,古惑仔网想要实现伪静态为:/gid-1.html。需要进一步处理,其实很简单,两步即可:

一、修改模板文件 template/default/forum/discuz.htm,找到代码(大概在第345行):

forum.php?gid=$cat[fid] 修改为: gid-$cat[fid].html

修改版块页模板文件 source/module/forum/forum_forumdisplay.php,找到代码(大概在第19行): Location: forum.php?gid=$_G[fid] 修改为: Location: gid-$_G[fid].html
找到代码 (大概在第75行):forum.php?gid=’.$forum_up[‘fid’]. 修改为:gid-‘.$forum_up[‘fid’].’.html
找到代码 (大概在第84行):forum.php?gid=’.$forum_top[‘fid’] 修改为:gid-‘.$forum_top[‘fid’].’.html
修改帖子模板文件 :打开 source/module/forum/forum_viewthread.php 文件,找到代码(大概在第131和137行共两处):? ‘forum.php?gid=’.$fup :修改为:? ‘gid-‘.$fup.’.html’ :
修改发帖页模板文件 :打开 source/module/forum/forum_post.php 文件,找到代码(大概在第125和131行共两处):? ‘forum.php?gid=’.$fup : 修改为:? ‘gid-‘.$fup.’.html’ :
二、把以下伪静态规则加入到我们做好的伪静态规则中,IIS服务器添加:
RewriteCond %{QUERY_STRING} ^(.*)$RewriteRule ^gid-([0-9]+)\.html$ forum.php?gid=$1%1
Apache服务器添加:
RewriteRule ^(.*)/gid-([0-9]+)\.html(\?(.*))*$ $1/forum\.php\?gid=$2
最后要注意的是,这段伪静态规则一样要加在栏目规则的伪静态规则上面,Apache的是:
RewriteCond %{QUERY_STRING} ^(.*)$RewriteRule ^forum-(\w+)-([0-9]+)\.html$ forum.php?mod=forumdisplay&fid=$1&page=$2&%1
IIS的是:
RewriteCond %{QUERY_STRING} ^(.*)$RewriteRule ^forum-(\w+)-([0-9]+)\.html$ forum.php?mod=forumdisplay&fid=$1&page=$2&%1
附完整的Discuz!伪静态规则文件(Apache服务器中的.htaccess文件)上面有网址。

野狼最后想说的:

discuz的伪静态做的是有点烂,不仅不支持目录化,而且默认的模板里栏目都没有进行伪静态,而且还是那种部分页面伪静态了,部分没有伪静态,很不好。好在这个程序用的人比较多,大家可以结合着网上的一些信息,自行摸索修改。

转载请注明:伪静态技术博客 » discuz伪静态配置