最近使用一款网友修改版的phpcms,把栏目生成到根目录下后发现分页的链接错误,比如我在域名/news目录下,而生成的分页链接是news/2.html,这样完整的URL就会多了一层news而出现404的错误。尝试了各种办法都没有解决,最后是添加了一个静态化的规则实现了正确的URL。

方法也很简单就是URL规则添加根路径,这样生成的分页链接就是/news/2.html

另外一种方法就是直接返回完整的带域名的URL,下面是网上的一种修复方法,看上去应该是好用的只不过我的没有成功,不知道是不是因为改版phpcms的原因,大家可以自己尝试下。

问题所在公共函数库:phpcms/libs/functions/global.func.php

找到子程序pageurl,大约在711行

在“$url = str_replace($findme, $replaceme, $urlrule);”下添加代码

/**
 * 返回分页路径
 *
 * @param $urlrule 分页规则
 * @param $page 当前页
 * @param $array 需要传递的数组,用于增加额外的方法
 * @return 完整的URL路径
 */
function pageurl($urlrule, $page, $array = array()) {
	if(strpos($urlrule, '~')) {
		$urlrules = explode('~', $urlrule);
		$urlrule = $page < 2 ? $urlrules[0] : $urlrules[1];
	}
	$findme = array('{$page}');
	$replaceme = array($page);
	if (is_array($array)) foreach ($array as $k=>$v) {
		$findme[] = '{$'.$k.'}';
		$replaceme[] = $v;
	}
	$url = str_replace($findme, $replaceme, $urlrule);
	$url = str_replace(array('http://','//','~'), array('~','/','http://'), $url);
	$app_path = pc_base::load_config('system', 'app_path');
	$appurl = rtrim( $app_path, "/" );
	if(strpos($url, $appurl) === false) {
		$url = $appurl.$url;
	}
	return $url;
}

另外推荐下网友修改版的一款phpcms,感觉还是下了很多功夫的

https://gitee.com/zhaoxunzhiyin/phpcms