作者:konakona
转载请著名!
申明,这不是一篇教学文,我没有义务教会每一个人,但我有必要分享我的所懂得的给大家,所以能不能真正看懂,就在你各人的LAMP能力了.
因为我不善解释…
我只是提供一个改的思路,大家想改成什么样,只要够灵活都可以实现.
最近客户有一个需求,就是他可以在后台修改商品和分类的URL,大概是 http://www.xx.com/yourcatename.html 这样子.
但这样的结果是:要将请求提取出来后拿到数据哭中LIKE…牺牲的效率太大,不适合B2C网站.
所以我推荐客户一种易于SEO,同时能减轻服务器负担,又提升执行效率的URI.
分类 http://www.xx.com/c-[yourcatename]-id[-bid].html
商品 http://www.xx.com/s-[yourdefinedname]-id.html
很明显,我的c-和s-是一个标识符,用于表名他是一个category还是一个shop.
开始改代码.
存客户的URL,首先需要有一个字段.ALTER TABLE `ecs_goods` ADD `goods_url` VARCHAR( 20 ) NOT NULL AFTER `goods_name`
ALTER TABLE `ecs_category` ADD `cat_url` VARCHAR( 20 ) NOT NULL AFTER `cat_name`
ECSHOP的URI重写FUNCTION在lib_common.php叫build_uri()
当条件为category时,我们在if ($rewrite) {后加入一段代码
//$uri = 'category-' . $cid; //切记先将原来的$uri注释掉
$tmp = $GLOBALS['db']->getRow("select * from ecs_category where cat_id = $cid");$cat_url = empty($tmp['cat_url']) ? 'noname' : $tmp['cat_url'];$uri = 'c-' . $cat_url . '-' . $cid;
再在条件为goods的else里的代码全部改成
$tmp = $GLOBALS['db']->getRow("select * from ecs_goods where goods_id = $gid");
$url = empty($tmp['goods_url']) ? 'noname' : $tmp['goods_url'];$uri = $rewrite ? 's-' . $url . '-' . $gid : 'goods.php?id=' . $gid;在后台清空缓存,大功告成.
你还没有?FUCK!自己去看后台设置.然后继续下一步,打开跟目录的.htaccess
#RewriteRule ^goods-([0-9]+)(.*)\.html$ goods\.php\?id=$1 [QSA,L]
RewriteRule ^s-[a-z]+-([0-9]+)(.*)\.html$ goods\.php\?id=$1 [QSA,L]#RewriteRule ^category-([0-9]+)(.*)\.html$ category\.php\?id=$1 [QSA,L]
RewriteRule ^c-[a-z]+-([0-9]+)(.*)\.html$ category\.php\?id=$1 [QSA,L]
完~!休息去咯~!