欢迎来到258分享网,纯净的网络源码分享基地!

258资源分享网

全部作品
全部作品
网站源码
微信源码
素材特效
源码插件
视频教程
建站学院
热门搜索: 织梦  农业种植  农业  安全设置  官方
258资源分享 > 建站学院 > discuz教程 > Discuz!伪静态原理分析

推荐下载

HTML5响应式自适应网咯设计

2020-05-12   浏览:736

高端HTML5响应式企业通用网

2020-05-06   浏览:518

html5响应式外贸网站英文版

2020-05-08   浏览:505

HTML5自适应律师工作室类网

2020-04-04   浏览:501

HTML5影视传媒文化公司类网

2020-05-12   浏览:495

Discuz!伪静态原理分析

发布时间:2020-01-22  

伪静态在seo火热的时代,是每个站长都比较关注的问题,discuz!论坛如何伪静态,为什么伪静态失效了,为什么列表页无法实现伪静态,为什么有些页面不是伪静态呢?下面dz官方nxy105从两个角度入手为大家分析下discuz! X2是如何实现伪静态功能。

 

第一、Discuz!伪静态是如何作用的

 

我们都知道,当我们通过地址访问一个页面的时候,访问的是服务器上的一个实体文件。例如,访问

复制代码

, 访问的是网站根目录下的index.html文件。然而,对于论坛,如果每一个页面(主题列表,内容页)都是一个静态的实体文件,那文件的数量将何其之 多,并且不能动态的实时的展现论坛的内容。如果仅仅使用动态访问,那么不利于增强搜索引擎的友好面,因此,我们将使用伪静态,展现形式是.html这样的 静态页面,而实际上依然是通过动态脚本来处理的。

 

discuz! X2的伪静态处理利用了服务器的rewrite模块,通过rewrite模块的配置的规则,对请求的url进行转换。

 

下面我们以Apache的rewrite模块为例,详细说明一下。

RewriteRule ^(.*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3&%1

复制代码

这是一条Apache的伪静态规则

 

rewrite规则匹配的是/forum-XX-XX.html的url请求,经过规则转换后,实际请求的链接是 /forum.php?mod=forumdisplay&fid=XX&page=XX,是不是很熟悉,这就是请求论坛主题列表的动态 链接啦。

 

所以问题来了,如果伪静态请求失效/forum-XX-XX.html,提示页面无法显示,有几种错误的可能性呢?

 

1、伪静态规则生效了有没有?

 

如果服务器不支持rewrite,如果忘了重启服务,如果.htaccess文件放置的位置不对,等等,都可能导致rewrite功能没有运行,这样肯定是不行的哦。所以,先检查下rewrite功能是否正常吧,如果使用空间的话,可以咨询下空间商的说。

 

2.规则错误了有没有?

 

如果规则是这样的

RewriteRule ^(.*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay

复制代码

少了东西是不是,所以/forum-XX-XX.html只会访问/forum.php?mod=forumdisplay,这样列表页肯定不显示了

 

如果规则更夸张一些

RewriteRule ^(.*)/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()函数。

我们来看看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();

            echo $content;

}

复制代码

程 序执行到这里的时候,执行了一个 $content = ob_get_contents();的操作, ob_get_contents()获取当前输出缓存中的所有数据,也就是说,模板返回的页面并没有直接显示给用户,而是被$content变量获取到 了。然后进入output_replace函数执行内容替换(各种替换,不仅仅是伪静态链接替换),最后又echo输出。

 

于是,替换工作就放在output_replace函数中,

    if(!empty($_G['setting']['output']['str']['search']))

    {

                if(empty($_G['setting']['domain']['app']['default'])) {

本文标签

:备案管家服务帮您把复杂流程变简单,解决您在进行网站备案过程中遇到的效率低下和成功率不高的问题。个人300/2个域名,企业500/5个域名,qq1650004.