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


在后台 => 全局 => 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值