关于修改disczu模板以后使伪静态链接失效的问题
内容简介:这是一篇关于discuz rewritestatus,伪静态链接,为什么更换了模版伪静态没了\的文章。论坛开启伪静态以后,之前一直正常,前几天链接突然变回动态的链接。而没有变成 thead-1-1.html这种形式,而 thead-1-1.html这样的链接仍旧是可以访问的,说明rewrite.ini规则仍然是生效的。而且这事跟rewrite规则应该没关系,主要是dz的程序问题。
前几天碰到一个问题
论坛开启伪静态以后,之前一直正常,前几天链接突然变回动态的链接。而没有变成 thead-1-1.html这种形式,而 thead-1-1.html这样的链接仍旧是可以访问的,说明rewrite.ini规则仍然是生效的。而且这事跟rewrite规则应该没关系,主要是dz的程序问题。
更新缓存无效。
细想了一番,觉得应该从dz的伪静态原理着手,发现dz是在 include目录下 global.func.php 文件中output()内根据伪静态的设置情况对页面输出的内容进行正则替换的:
} else {
$searcharray = $replacearray = array();
if($rewritestatus & 1) {
$searcharray[] = "/\<a href\=\"forumdisplay\.php\?fid\=(\d+)(&page\=(\d+))?\"([^\>]*)\>/e";
$replacearray[] = "rewrite_forum(‘\\1‘, ‘\\3‘, ‘\\4‘)";
}
if($rewritestatus & 2) {
$searcharray[] = "/\<a href\=\"viewthread\.php\?tid\=(\d+)(&extra\=page\%3D(\d+))?(&page\=(\d+))?\"([^\>]*)\>/e";
$replacearray[] = "rewrite_thread(‘\\1‘, ‘\\5‘, ‘\\3‘, ‘\\6‘)";
}
if($rewritestatus & 4) {
$searcharray[] = "/\<a href\=\"space\.php\?(uid\=(\d+)|username\=([^&]+?))\"([^\>]*)\>/e";
$replacearray[] = "rewrite_space(‘\\2‘, ‘\\3‘, ‘\\4‘)";
}
if($rewritestatus & 8) {
$searcharray[] = "/\<a href\=\"tag\.php\?name\=([^&]+?)\"([^\>]*)\>/e";
$replacearray[] = "rewrite_tag(‘\\1‘, ‘\\2‘)";
}
}$content = preg_replace($searcharray, $replacearray, ob_get_contents());
但是,查边了所有的程序文件,发现没有什么地方调用了output函数,见鬼了。。
睡醒了后想,可能是在模板文件里面调用的,于是下载了一个新的dz文件,在其中搜索。。才发现,在之前我修改了footer模板,删除了以下语句
{eval output();}
删除此句后,无论如何设置伪静态,链接都不会改变。。
曾经在论坛搜索“伪静态 模板”发现几个这样的问题都没有有用回答,特此发文,希望对有类似经历的朋友能有所帮助。
相关帖子
http://www.discuz.net/viewthread.php?tid=908298
http://www.discuz.net/viewthread.php?tid=1098010
http://www.discuz.net/viewthread.php?tid=295351
http://www.discuz.net/viewthread.php?tid=605670