DEDECMS织梦使用后台栏目的命名规则做伪静态URL
使用后台设置的栏目命名规则做伪静态,这个我找了很久往上没有多少答案。很多程序的伪静态都是一个前缀比如 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标签,等都需要修改
这方法我们需要修改很多织梦程序文件才能实现。继续关注我还会发表一些关于织梦伪静态的文章。