Discuz使用笔记(一)

规范化目录

规范化目录即为URL后面添加斜杠/ 

如输入http://www.cnblogs.com/jaywoo 自动添加/转换成 http://www.cnblogs.com/jaywoo/

之前用ISAPI_Rewrite在IIS中伪静态 不规范化目录也不会出现链接错误(为了SEO一般是范化目录的 规则为:RewriteRule ^/([^.]+[^/]$) /$1/ [L,R] ),

但在Apache中却是连接错误的,所以需要解决的。解决思路有两种

1.写两个重写规则 一个加/的 一个不加/  这种方法不可取的 因为需要为多个目录编写

2.自动添加/ 规范化目录

Apache规范化目录网上说在Windows中会自动规范化的 但我发现却不是自动规范化的 可能是我配置有问题吧。

度娘说规范化目录是:RewriteRule ^(.+[^/])$ $1/ [R] 但我发现没有用 于是就自己写一条规则:RewriteRule ^(\w+)$ $1/ [R]

 

静态版块目录化和贴子目录化

现在网站一般都采用扁平的树型网状结构 即目录式导航

如:http://www.cnblogs.com/daimage/archive/2012/02/25/2367534.html 

如何在Discuz中使用目录式导航呢?

一、 修改source\function下的function_core.php

找到

if($type == 'forum_forumdisplay') {
list(,,, $fid, $page, $extra) = func_get_args();
$r = array(
'{fid}' => empty($_G['setting']['forumkeys'][$fid]) ? $fid : $_G['setting']['forumkeys'][$fid],
'{page}' => $page ? $page : 1,
);
} elseif($type == 'forum_viewthread') {
list(,,, $tid, $page, $prevpage, $extra) = func_get_args();
$r = array(
'{tid}' => $tid,
'{page}' => $page ? $page : 1,
'{prevpage}' => $prevpage && !IS_ROBOT ? $prevpage : 1,
);

改为

if($type == 'forum_forumdisplay') {
list(,,, $fid, $page, $extra) = func_get_args();
$r = array(
'{fid}' => empty($_G['setting']['forumkeys'][$fid]) ? $fid : $_G['setting']['forumkeys'][$fid],
'{page}' => $page ,
);
} elseif($type == 'forum_viewthread') {
list(,,, $tid, $page, $prevpage, $extra) = func_get_args();
$fid = DB::result_first("SELECT fid FROM ".DB::table('forum_thread')." WHERE tid = '$tid'");
$r = array(
'{fid}' => empty($_G['setting']['forumkeys'][$fid]) ? $fid : $_G['setting']['forumkeys'][$fid],
'{tid}' => $tid,
'{page}' => $page ,
'{prevpage}' => $prevpage && !IS_ROBOT ? $prevpage : 1,
);

 

二、 在后台管理中->全局->Seo设置->静态化URL (记得需要在修改function_core.php中代码后再设置,否则可能会出现加载CSS,JS错误)

若设置成以下格式

     在"论坛主题列表页"的格式中填写:{fid}/{page}/
     在"论坛主题内容页"的格式中填写:{fid}/d{tid}/{page}

   则伪出来的URL则形式如下:

     论坛主题列表如:http://www.cnblogs.com/jaywoo  论坛帖子页则如:http://www.cnblogs.com/jaywoo/d123456 

 .htaccess文件配置为:

 帖子对应为:

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule d([0-9]+)(/([0-9]+))?(/)?$ forum.php?mod=viewthread&tid=$1&extra=page\%3D$5&page=$3&%1 [L,NC]

主题对应为:

 

若设置成以下格式:

     在"论坛主题列表页"的格式中填写:{fid}/{page}/
     在"论坛主题内容页"的格式中填写:{fid}/{tid}{page}.html

则伪出来的URL则形式如下:

     论坛主题列表如:http://www.cnblogs.com/jaywoo  论坛帖子页则如:http://www.cnblogs.com/daimage/archive/2012/02/25/2367534.html 

主题对应为:

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(\w+)/$ forum.php?mod=forumdisplay&fid=$1&page={page}&%1 [L,NC]

帖子对应为:

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^archiver/(fid|tid)-([0-9]+)\.html$ archiver/index.php?action=$1&value=$2&%1 [L,NC]

  

作者:代码哥
出处:http://daimage.cnblogs.com/
说明:本博原创文章版权归博客园和本人共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出作者名称和原文连接,否则保留追究法律责任的权利。

posted @ 2012-03-15 02:49  代码哥  阅读(1083)  评论(0编辑  收藏  举报