Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

x2 程序处理伪静态分析

[复制链接]
云天一 发表于 2011-5-31 23:10:30 | 显示全部楼层 |阅读模式
*************************************************
** 本教程基于版本:Discuz! X 2.0               **
*************************************************
x2 程序处理伪静态分析

在后台勾选相应的开启伪静态的项 程序会将所填写的rewrite 格式 通过 rewritedata 函数的转换

存进数据库setting表里面

之后更新缓存等操作时候程序从数据库中读出该 rewriterule 替换为相应的正则的 search 和 replace 存在 $_G['setting']['output'] 里面。

在 discuz 各页面中的链接除了小部的链接是在 php 程序里面直接使用 rewriteoutput 函数(可在 function_core.php 里面查看)处理成静态的地址直接在模板里面输出使用外

页面中的大部分的需要替换成静态地址的链接都是在模板解析后,最后在程序包含缓存文件里面处理的

我们打开 ./template/default/common/footer.htm 文件,在该文件最底部可以可以发现 这么一段代码

  1. <!--{eval output();}-->
  2. </body>
  3. </html>
复制代码
如果我们去掉这个函数即去掉
  1. <!--{eval output();}-->
复制代码
会发现所有的页面都是动态的地址,不管你在后台是否开启了伪静态

因为footer.htm 是几乎所有程序模板都会引用到的脚部的模板,

大部分的模板里面写死的动态的地址在通过 template 函数解析后,最后包含缓存文件时,将执行output() 这个函数 (可以在 function_core.php 里面查看)来处理模板里面的地址

程序在执行 output 函数时候,如果你在后台开启伪静态后

该函数会将之前程序及模板输出的所有内容 使用 ob_get_contents 函数赋值给 $content

如果你在 output() 函数 里面
  1. $content = ob_get_contents();
复制代码
之前使用 exit(); 断一下  

你会发现其实论坛的页面是可以正常打开使用的,只是区别是此时的论坛页面中的地址是全部是为动态地址

因为下面才是真正处理地址的部分

$content = ob_get_contents();  之后 output_replace 函数对 $content 的内容中的地址进行替换

output_replace 使用的正则的 search 和 replace 的字符串就是之前存进 $_G['setting']['output'] 中的替换字符串

在 output_replace 处理之后 此时的 $content 的内容中的后台设置需要为静态的地址就已经为伪静态

替换成功之后 output 函数 再使用 ob_end_clean 对之前 ob_start 后输出的内容进行清除

之后 echo $content 输出整个页面的内容

而此时的页面才是最终和大家见面的含有伪静态地址的页面

评分

2

查看全部评分

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-17 08:51 , Processed in 0.024641 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表