牛牛逼逼叉叉
菜单

DEDECMS织梦使用后台栏目的命名规则做伪静态URL

2014年11月25日,分类《网站建设》,作者:
博客捐助

使用后台设置的栏目命名规则做伪静态,这个我找了很久往上没有多少答案。很多程序的伪静态都是一个前缀比如 view 或 list 等。

例子:http://www.domain.com/sort/view-1-2.html 或 http://www.doamin.com/list-1-2-1.html

也不是说非要用后台命名规则做伪静态,因为对于老站来说如果说要更换链接的话,比如解决这个问题。当然我遇到了问题。

现在说说如何把上面里例子的URL变成我们的栏目命名规则URL。

修改伪静态URL

首先找到 DedeCMS-V5.7-UTF8-SP1\uploads\include\helpers\channelunit.helper.php 文件。

再说需要修改的地方,这些需要修改的地方都有一个共同点。就是他们都有注释。这样找起来就容易了。

首先第一处需要改的地方,这里文章的URL。

 //动态文章
 if($cfg_rewrite == 'Y')
 {
    return $GLOBALS["cfg_plus_dir"]."/view-".$aid.'-1.html';
 }
 else
 {
    return $GLOBALS['cfg_phpurl']."/view.php?aid=$aid";
 }

先说文章的吧。找到上面之后往下看到 else 往下一大段代码。复制下来。

 $articleDir = MfTypedir($typedir);
 $articleRule = strtolower($namerule);
 if($articleRule=='')
 {
    $articleRule = strtolower($GLOBALS['cfg_df_namerule']);
 }
 if($typedir=='')
 {
    $articleDir = $GLOBALS['cfg_cmspath'].$GLOBALS['cfg_arcdir'];
 }
 $dtime = GetDateMk($timetag);
 list($y, $m, $d) = explode('-', $dtime);
 $arr_rpsource = array('{typedir}','{y}','{m}','{d}','{timestamp}','{aid}','{cc}');
 $arr_rpvalues = array($articleDir,$y, $m, $d, $timetag, $aid, dd2char($m.$d.$aid.$y));
 if($filename != '')
 {
    $articleRule = dirname($articleRule).'/'.$filename.$GLOBALS['cfg_df_ext'];
 }
 $articleRule = str_replace($arr_rpsource,$arr_rpvalues,$articleRule);
 if(preg_match("/\{p/", $articleRule))
 {
    $articleRule = str_replace('{pinyin}',GetPinyin($title).'_'.$aid,$articleRule);
    $articleRule = str_replace('{py}',GetPinyin($title,1).'_'.$aid,$articleRule);
 }
 $articleUrl = '/'.preg_replace("/^\//", '', $articleRule);
 if(preg_match("/index\.html/", $articleUrl) && $cfg_arc_dirname=='Y')
 {
    $articleUrl = str_replace('index.html', '', $articleUrl);
 }
    return $articleUrl;

把第一个说的代码 return $GLOBALS[“cfg_plus_dir”].”/view-“.$aid.’-1.html’; 替换成上面我让复制下来的代码。

然后保存。注意一下一定要检查一下有没有错误,“{” “}” 注意看一下。

保存之后去把文章都改成动态浏览,再去后台修改开启伪静态。

配置伪静态

开启伪静态:后台—系统—核心设置—开启伪静态(在下面,一个单选框,勾选是。保存)

修改文章动态浏览:update dede_archives set ismake=-1(动态)/1(静态)

修改栏目为动态浏览:update dede_arctype set isdefault=-1(动态)/1(静态)

栏目可以不改。因为我后面会发一篇关于为什么不修改的原因。

好了,程序修改完了。

接下来就是伪静态了。这里要接触到 .htaccess 文件,写伪静态。

apache使用 RewriteRule ^栏目名/([0-9]+)([0-9]+)\.html$ /plus/view.php?arcID=$1&pageno=$2 保存就可以了。

IIS使用 RewriteRule ^(.*)/栏目名/([0-9]+)([0-9]+)\.html $1/plus/view\.php\?arcID=$2&pageno=$3 [I] 保存就可以了。

例如:apache 使用 RewriteRule ^meitibaodao/([0-9]+)([0-9]+)\.html$ /plus/view.php?arcID=$1&pageno=$2

例如:IIS 使用 RewriteRule ^(.*)/meitibaodao/([0-9]+)([0-9]+)\.html $1/plus/view\.php\?arcID=$2&pageno=$3 [I]

前后的匹配 第一个([0-9]+)与后面的$1匹配,第二个([0-9]+)与第二个$2匹配。而IIS里匹配的$2和$3,$1匹配给了(.*)。

分页问题

这样之后如果你有分页的话,URL会变成 http://www.domain.com/meitibaodao/view-123-1.html和http://www.domain.com/meitibaodao/view-123-2.html

而在http://www.domain.com/meitibaodao/view-123-2.html里上一页是http://www.domain.com/meitibaodao/view-123-1.html;不是我们想要的http://www.domain.com/meitibaodao/123.html

这个为题还没解决

所以伪静态就需要在加一条

例如:apache 使用 RewriteRule ^meitibaodao/view-([0-9]+)-([0-9]+)\.html$ /plus/view.php?arcID=$1&pageno=$2

例如:IIS 使用 RewriteRule ^(.*)/meitibaodao/view-([0-9]+)-([0-9]+)\.html $1/plus/view\.php\?arcID=$2&pageno=$3 [I]

总结

这就是使用织梦使用后台命名规则用做URL的方法。

那么问题来了,这样的伪静态有多少栏目就需要添加多少条伪静态规则。这样 .htaccess 文件体积也会变大。

如果要使用这种方式我们还需要修改 arc.archives.class.php 在 DedeCMS-V5.7-UTF8-SP1\uploads\include 里。这里是分页

这只是文章的,然后还有栏目URL。还要修改 arc.listview.class.php 文件,DedeCMS-V5.7-UTF8-SP1\uploads\include 里。这里是列表分页

还有TAG标签,等都需要修改

这方法我们需要修改很多织梦程序文件才能实现。继续关注我还会发表一些关于织梦伪静态的文章。

 



发表评论

电子邮件地址不会被公开。 必填项已用*标注

【上一篇】

如何检测替换hosts里无效IP

【下一篇】

云备份(DBFen)免费网站数据备份服务(中国第一云备份品牌)