网站优化—关注搜索引擎优化,网站程序优化以及网站安全

关于修改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+)(&amp;page\=(\d+))?\"([^\>]*)\>/e";
    $replacearray[] = "rewrite_forum(‘\\1‘, ‘\\3‘, ‘\\4‘)";
   }
   if($rewritestatus & 2) {
    $searcharray[] = "/\<a href\=\"viewthread\.php\?tid\=(\d+)(&amp;extra\=page\%3D(\d+))?(&amp;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