Discuz!伪静态原理分析

假装在seo火热的时代,是每个站长都比较关注的问题,discuz!论坛如何假装,为什么假装失效了,为什么列表页无法实现假装,为什么页面不是假装呢?下面dz 105从两个角度为大家分析下disc!X2是如何实现虚假的功能。
一、Discuz!假一个是如何作用的
我们都知道,当我们通过地址访问一个页面的时候,访问是服务器上的一个实体文件。例如,访问
http://www.xxx.com/index.html
复制代码
,访问的是网站根目录下的index.html文件。然而,对于论坛,每一个页面(主题列表,内容页)都是一个生动的实体文件,那文件的数量将何其之多,并且不能动态的实时的形态的页面的内容。如果自己使用动态访问,那么不支持搜索引擎的友好面,因此,将使用假的,形态是.html这样的我们网页的内容,而实际上仍然是通过动态脚本来处理的。
讨论!X2的伪造处理利用了服务器的rewrite模块,通过rewrite模块的配置规则,对请求的url进行转换。
下面我们以Apache的重写模块为例,详细说明一下。
重写规则 ^(.*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3&%1
复制代码
这是一条Apache的静态规则
重写规则匹配是/forum-XX-XX.html的url请求,经过规则转换后,实际请求的链接是/forum.php?mod=forumdisplay&fid=XX&page=XX,是不是很了解,这请求就是论坛主题列表的动态链接啦。
所以问题来了,如果虚假请求无效/forum-XX-XX.html,提示页面无法显示,有几种错误的结果呢?
1、伪即时生效了有没有?
如果服务器不支持重写,如果索引重启服务,如果.htaccess 文件放置的位置,等等,都可能导致重写功能没有运行,这样肯定是不行的哦。所以,先检查下重写功能是否正常吧,如果用空间的话,可以咨询下空间商的说。
2. 规则错误了有没有?
如果规则是这样的
重写规则 ^(.*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay
复制代码
少了东西是不是,所以/forum-XX-XX.html的东西访问/forum.php?mod=forumdisplay,这样列表页肯定不显示了
如果规则更夸张一些
重写规则 ^(.*)/forum-(\w+)-([0-9]+)\.html$ $1/forumdisplay.php&fid=$2&page=$3&%1
复制代码
forumdisplay.php这个文件都没有,页面当然无法显示,这说明了过去版本(如X1.5和7.0)的特定规则无法在X2中直接使用的原因了。
所以规则正确才是页面能够正常访问的基础,如果使用了新的规则,发现无法访问了,首先检查规则有没有写错了。不用各位站长费心的嘛)
3、网络正常有没有?
如果拼命在伪命找找原因,不是我站点已经无法正常访问,是有种缘木求鱼的,站点无法访问的原因请参看官方论坛相关教程。
分析到这一步,相信大家对于假想自己已经有一定的了解了,那么我们就该转向下一个问题了。
二、假装是如何在论坛上显示出来的?
难道我的现场还是瞬间爆炸了,但在首页动态链接呀?那么下面的讲解下,假装是如何出来的。
了解discuz的同学应该知道,在论坛模板文件中,所以的url链接都是以动态的形式返回输出的。(在模板中看不到链接?是的)!那实际上链接又是如何实现。
在模板文件的footer.htm文件中,有这样一行代码。
<!–{eval output();}–>
复制代码
这部分代码解析后,直接调用了function_core.php中的output()函数。
我们来看看输出函数执行了哪些操作。
if($_G[‘setting’][‘rewritestatus’] || !empty($havedomain))
{
            $content = ob_get_contents();
            $content = output_replace($content);
            ob_end_clean();
            $_G[‘gzipcompress’] ? ob_start(‘ob_gzhandler’) : ob_start();
            回声$内容;
}
复制代码
程先执行到这里的,了一个$content = ob_get_contents();的操作,ob_get_s()获取当前输出中的所有数据,执行,模板返回的页面并没有直接显示给用户,比例被$内容变量获取到了。然后进入output_replace函数执行内容替换(各种替换,原来的假链接替换),最后又回声输出。
于是,替换工作就更换输出_replace函数中,
    if(!empty($_G[‘setting’][‘output’][‘str’][‘search’]))
    {
                if(empty($_G[‘setting’][‘domain’][‘app’][‘default’])) {
                    $_G[‘setting’][‘output’][‘str’][‘replace’] = str_replace(‘{CURHOST}’, $_G[‘siteurl’], $_G[‘setting’][‘output’ ][‘str’][‘替换’]);
                }
                $content = str_replace($_G[‘setting’][‘output’][‘str’][‘search’], $_G[‘setting’][‘output’][‘str’][‘replace’] , $内容);
    }
复制代码
这一部分,替换为当前站点的域,将写在模板中的'{CURHOST}’占位符替换为$_G[‘siteurl’]的值。
    if(!empty($_G[‘setting’][‘output’][‘preg’][‘search’]))
    {
                if(empty($_G[‘setting’][‘domain’][‘app’][‘default’])) {
                        $_G[‘setting’][‘output’][‘preg’][‘search’] = str_replace(‘\{CURHOST\}’, preg_quote($_G[‘siteurl’]), $_G[‘setting’ ][‘输出’][‘preg’][‘搜索’]);
                        $_G[‘setting’][‘output’][‘preg’][‘replace’] = str_replace(‘{CURHOST}’, $_G[‘siteurl’], $_G[‘setting’][‘output’ ][‘preg’][‘替换’]);
                }
               $content = preg_replace($_G[‘setting’][‘output’][‘preg’][‘search’], $_G[‘setting’][‘output’][‘preg’][‘replace’] , $内容);
    }
复制代码
这一个部分则是替换假的链接,具体的实现过程,简单介绍下,没有兴趣的同学可以跳过。
$_G[‘setting’][‘output’][‘preg’][‘search’]数组中保存的数据,保存
/<a href\=”()forum.php\?mod\=forumdisplay&(amp;)?fid\=(\w+)(&page\=(\d+))?”([^\>]*)\ >/e
对应的$_G[‘setting’][‘output’][‘preg’][‘replace’]中的一条数据为
rewriteoutput(‘forum_forumdisplay’, 0, ‘\1’, ‘\3’, ‘\5’, ‘\6’)
这里利用了preg_replace函数的一个,当匹配模式中带有特性符,用进行后向引用替换,即替换变量和执行对应函数。也就是说,preg_replace将匹配到的子串,以参数的状态函数rewriteoutput函数,rewriteoutput函数返回的值作为替换的内容。(页面上有几个链接,会执行几次rewriteoutput函数,这就是瞬间激活函数影响性能的原因)
问题又来了,假冒意外这就是……?
原因很简单,因为是在页面输出之前才做的替换,所以一切程序上做可能做的手脚都是浮云了。感动/forum.php?mod=viewthread&tid=XX#lastpost这样链接的自然是无法被成功替换的咯
到此为止,Discuz 伪是如何替换并显示的显性表现了。

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有Q币奖励和额外收入!

AB模板网 Discuz教程 Discuz!伪静态原理分析 http://www.abmoban.cn/379.html

一花一世界,一叶一菩提。

常见问题
  • 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若商用引起版权纠纷,一切责任均由使用者承担。
查看详情
  • 常见的情况是下载不完整: 对比下载压缩包与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议重新下。
查看详情

相关文章

评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务