博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Discuz! X2 下 URL 静态化的实现方法
阅读量:6951 次
发布时间:2019-06-27

本文共 2237 字,大约阅读时间需要 7 分钟。

  hot3.png

在后台 => 全局 => 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} οnclick="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 { ?> οnclick="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 函数直接显示出来。
至此,站点界面上的地址将显示成静态地址。

转载于:https://my.oschina.net/hs110/blog/69298

你可能感兴趣的文章
总结之:CentOS 6.5 rsync+inotify实现数据实时同步备份
查看>>
SCE2007 –安装配置指南
查看>>
MySQL Study之--MySQL下图形工具的使用(phpMyAdmin)
查看>>
ASP.NET MVC4 乱七八糟罗列
查看>>
java面试
查看>>
SpringMVC中JSP页面不显示EL表达式的原因
查看>>
每周百万封业务邮件的服务器不知道为啥就down掉了?
查看>>
用Windows XP系统安装声卡驱动程序 (UAA)
查看>>
centos-5.5安装vmvare tools
查看>>
asp.net 调用echarts显示图表控件随浏览器自适应解决方案
查看>>
Oracle 备份与恢复学习笔记(8)
查看>>
初识 Powershell 5.0 class
查看>>
Dubbo点滴(1) SPI入门
查看>>
WebSocket+HTML5实现在线聊天室
查看>>
nagios扩展开发之check_ping
查看>>
控制文件丢失的恢复(续)
查看>>
in-band(带内) and out-of-band(带外) management
查看>>
db link的查看创建与删除
查看>>
Android小项目合集(经典教程)包含十五个Android开发应用实例
查看>>
利用EEPROM实现arduino的断电存储
查看>>