使用zdcms建站时,当网站中包含大量不同规则的URL时,使用默认的正则URL来做伪静态时,容易出现规则冲突的问题,今天就来说说用自定义函数来设置伪静态URL,从而规避伪静态规则冲突的问题。
第一步,首先打开config/custom.php,在里面定义自定义规则函数。
举例,我想实现栏目URL为:根目录/目录名;内容URL为:根目录/id.html;那么可以用下面代码实现:
//根目录+当前栏目URL function brand_cat_url($data) { //函数名自定义,定义你自己能记得的名称即可 $dirname = ($data['dirname']); //获取目录名称 $url = "/".$dirname."/"; //拼接需要的URL格式 dr_mkdirs(WRITEPATH.'brandcat/'); // 创建id缓存存储目录,目录名称自己设定 file_put_contents(WRITEPATH.'brandcat/'. md5(trim($url, '/')).'.txt', $data['id']); // 将id号存储缓存文件 return $url; //返回url } //根目录+文章IDURL function brand_id_url($data) { //函数名自定义,定义你自己能记得的名称即可 $artid = ($data['id']); //获取文章id $url = "/".$artid.".html"; // 拼接需要的url规则:/id.html dr_mkdirs(WRITEPATH.'brandaid/'); // 创建id缓存存储目录,目录名称自己设定 file_put_contents(WRITEPATH.'brandaid/'. md5(trim($url, '/')).'.txt', $data['id']); // 将id号存储缓存文件 return $url; //返回url }
第二步,打开config/rewrite.php,在return []代码之前加上如下代码:
// 判断url是否是来自自定义函数 if (CMSURI) { /*自定义规则开始*/ //根目录+当前栏目URL(栏目页使用) $brandcat = WRITEPATH.'brandcat/'.md5(urldecode(CMSURI)).'.txt'; if (is_file($brandcat)) { $catid = file_get_contents($brandcat); if ($catid) { return [ CMSURI => 'index.php?c=category&id='.$catid, // 栏目动态URL地址 ]; } } //根目录+文章ID URL $brandid = WRITEPATH.'brandaid/'.md5(urldecode(CMSURI)).'.txt'; if (is_file($brandid)) { $id = file_get_contents($brandid); if ($id) { return [ CMSURI => 'index.php?c=show&id='.$id, // 内容动态URL地址 ]; } } /*自定义规则结束*/ }
完成以上两步就可以实现通过自定义函数来做栏目页和内容页的URL伪静态了。
这里再举个例子,假如想实现用拼音来实现内容页的URL呢?可以参考以下代码:
/* /config/custom.php代码如下: */ //根目录+文章拼音URL function root_title_url($data) { $title = ($data['title']); //获取标题文字 $py = \Phpcmf\Service::L('pinyin')->result($title); // 把每个汉字转换为拼音 $url = "/".$py.".html"; // url规则:/pinyin.html dr_mkdirs(WRITEPATH.'myroottitleurl/'); // 创建id缓存存储目录 file_put_contents(WRITEPATH.'myroottitleurl/'. md5(trim($url, '/')).'.txt', $data['id']); // 将id号存储缓存文件 return $url; //返回最终URL } /* /config/rewrite.php代码如下: */ if (CMSURI) { /*自定义规则开始*/ //根目录+文章拼音URL $myroottitleurl = WRITEPATH.'myroottitleurl/'.md5(urldecode(CMSURI)).'.txt'; if (is_file($myroottitleurl)) { $id = file_get_contents($myroottitleurl); if ($id) { return [ CMSURI => 'index.php?c=show&id='.$id, // 内容页动态URL ]; } } }