使用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
];
}
}
}