文档章节

Discuz! X2 下 URL 静态化的实现方法

啊和
 啊和
发布于 2012/07/27 09:23
字数 582
阅读 118
收藏 0

在后台 => 全局 => SEO设置=> URL 静态化,开启各个页面的静态化后,在站点界面上,可以看到所有的链接都变成静态地址格式。下面我们看一下这个过程是怎么实现的。(以主题列表页为例)

众所周知,Discuz!在页面打开前,先进行逻辑运算,然后引用模板的缓存文件,显示在屏幕上。在逻辑运算部分,不涉及URL 格式的操作,只是处理URL的组成元素,比如fid、tid等。
再看一下模板文件,找到template\default\forum\forumdisplay_list.htm 文件,可以看到里面的主题列表项依然是动态地址格式,如下

<a href="forum.php?mod=viewthread&tid=$thread[tid]&{if $_G['gp_archiveid']}archiveid={$_G['gp_archiveid']}&{/if}extra=$extra"$thread[highlight]{if $thread['isgroup'] == 1 || $thread['forumstick']} target="_blank"{else} onclick="atarget(this)"{/if} class="xst" >$thread[subject]</a>

最后,我们再去这部分的缓存文件中去找一下,打开data\template\1_diy_forum_forumdisplay.tpl.php,找到

<a href="forum.php?mod=viewthread&tid=<?php echo $thread['tid'];?>&<?php if($_G['gp_archiveid']) { ?>archiveid=<?php echo $_G['gp_archiveid'];?>&<?php } ?>extra=<?php echo $extra;?>"<?php echo $thread['highlight'];?><?php if($thread['isgroup'] == 1 || $thread['forumstick']) { ?> target="_blank"<?php } else { ?> onclick="atarget(this)"<?php } ?> class="xst" ><?php echo $thread['subject'];?></a>

可以看到,依然是动态地址。但是在文件的最后,有一段代码

<?php output();?></body>

这个 output 函数欧洲杯预测 就是用来控制页面地址显示方式。其实,它原始代码在模板 footer.html 中

<!--{eval output();}-->
</body>

我们看一下 output 函数,打开 source\function\function_core.php 文件,找到 function 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;
}

当后台开启URL静态化后,页面的输出内容会被 output_replace 进行处理,在 output_replace 函数中,

if(!empty($_G['setting']['output']['preg']['search'])) {
        if(empty($_G['setting']['domain']['app']['default'])) {
                $_G['setting']['output']['preg']['search'] = str_replace('\{CURHOST\}', preg_quote($temp['host']), $_G['setting']['output']['preg']['search']);
                $_G['setting']['output']['preg']['replace'] = str_replace('{CURHOST}', $temp['host'], $_G['setting']['output']['preg']['replace']);
        }
        $content = preg_replace($_G['setting']['output']['preg']['search'], $_G['setting']['output']['preg']['replace'], $content);
}

通过这段代码进行动态地址和静态地址间的替换。其中 $_G['setting']['output'] 中是后台设置的URL静态化规则。 output_replace 函数处理完后,将替换后的内容返回,返回结果通过 output 函数直接显示出来。

至此,站点界面上的地址将显示成静态地址。

本文转载自:http://cnxsz.com/jzcx/bbs/17620.html

共有 人打赏支持
啊和
粉丝 10
博文 42
码字总数 1249
作品 0
石景山
程序员
私信 提问
Discuz X2站点URL静态化(修改.htaccess文件设置Rewrite规则)

1.此为Apache Web Server(虚拟主机用户),注意修改RewriteBase,最后保存为.htaccess 2.上传到你的Discuz程序所在的目录 3.修改discuz x2 - seo设置 - 把所有项选择为可用,Rewrite兼容性选否...

晨曦之光
2012/04/24
223
0
[转]Apache 下配置 mod_Rewrite

URL 静态化是一个利于搜索引擎的设置,通过 URL 静态化,达到原来是动态的 PHP 页面转换为静态化的 HTML 页面,当然,这里的静态化是一种假静态,目的只是提高搜索引擎的抓取量,Comsenz 旗下...

Wone
2012/03/19
0
1
Discuz X2多人斗地主[消耗论坛积分]小体积版本,仅25MB!

插件名称: Discuz X2多人斗地主 插件来源: 原创插件 适用版本: Discuz! X2 语言编码: GBK简体 UTF8简体 最后更新时间: 2011-10-30 插件作者: 问答娱乐 插件简介: discuz X2斗地主积分版插件,...

付翔
2011/11/24
0
0
JSP整合discuz x2

现在公司做了一个OA系统 用的是JSP做的 现在要求把discuz x2论坛也加进去 在OA系统实现一键登录, 屏蔽discuz x2登录功能(以解决) 数据要同步(已解决) 求各位 说说 我怎么能够实现单点登...

主席
2012/03/23
575
1
百度云bae安装discuz论坛教程

作者:孤风一剑 发布:2013-05-11 13:37 栏目:站长在线 点击:6,846次 41条评论 各位草根们有福啦,弄了几天,终于可以在bae上搭建discuz论坛了,下面我就简洁精准的介绍哦,安装步骤(请严...

thinkyoung
2013/10/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

kettle demo9 在Java代碼中读取文件内容插入到数据库

kettle调用java代码一步步扩展,本次在Java代码里读取本地文件,然后把数据插入到数据库 本地文件内容,book.txt 完整流程图 1、生成记录,设置1条 2、java代码,主要两部分,第一,方法上面...

wells杨
36分钟前
3
0
使用split_size优化的ODPS SQL的场景

首先有两个大背景需要说明如下: 说明1:split_size,设定一个map的最大数据输入量,单位M,默认256M。用户可以通过控制这个变量,从而达到对map端输入的控制。设置语句:set odps.sql.mapp...

阿里云官方博客
39分钟前
3
0
让线程按顺序执行8种方法

实现 我们下面需要完成这样一个应用场景: 1.早上;2.测试人员、产品经理、开发人员陆续的来公司上班;3.产品经理规划新需求;4.开发人员开发新需求功能;5.测试人员测试新功能。 规划需求,...

编程SHA
42分钟前
2
0
云服务无法绑定公网IP问题解决方案

问题描述:在云服务器上跑的代码启动服务监听公网IP的时候可能报如下异常 bind: cannot assign requested addressbind: cannot assign requested address ..... 查看配置文件写的确实是ssh连...

MrPei
45分钟前
4
0
java中的this::

::是java8 中新引入的运算符 Class::function的时候function是属于Class的,应该是静态方法。 this::function的funtion是属于这个对象的。 注意: 调用方法可以名称不一样,但是需要参数一样...

Java搬砖工程师
49分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部