第一、Discuz!伪静态是如何作用的
我们都知道,当我们通过地址访问一个页面的时候,访问的是服务器上的一个实体文件。例如,访问
- http://www.moke8.com/index.html
discuz! X2的伪静态处理利用了服务器的rewrite模块,通过rewrite模块的配置的规则,对请求的url进行转换。
下面我们以Apache的rewrite模块为例,详细说明一下。
- RewriteRule ^(.*)/forum-(w+)-([0-9]+).html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3&%1
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
如果规则更夸张一些
- RewriteRule ^(.*)/forum-(w+)-([0-9]+).html$ $1/forumdisplay.php&fid=$2&page=$3&%1
所以规则正确才是页面能够正常访问的前提,如果使用新的规则,发现无法访问了,首先检查规则有没有写错了。(其实这些在论坛后台伪静态设置的地方都可以查的到,根本不用各位站长费心的嘛)
3、网络正常有没有?
如果拼命在伪静态中找寻原因,没留意站点已经无法正常访问,是不是有种缘木求鱼的感觉,站点无法访问的原因请参看官方论坛相关教程。
分析到这一步,相信大家对于伪静态如何起作用已经有一定的了解了,那么我们转向下一个问题。
第二、伪静态是如何在论坛显示出来的?
为什么我的站伪静态开启了,但在首页还是显示动态链接呀?那么下面讲解下,伪静态是如何显示出来的。
了解discuz!的同学应该知道,在论坛模板文件中,所以的url链接都是以动态的形式返回输出的。(在模板中看不到静态链接?是的)按照常规,应该都显示动态链接,那么静态链接又是如何实现。
在模板文件的footer.htm文件中,有这样一行代码。
我们来看看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;
- }
于是,替换工作就放在output_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']['replace']);
- }
- $content = str_replace($_G['setting']['output']['str']['search'], $_G['setting']['output']['str']['replace'], $content);
- }
- 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']['output']['preg']['search']);
- $_G['setting']['output']['preg']['replace'] = str_replace('{CURHOST}', $_G['siteurl'], $_G['setting']['output']['preg']['replace']);
- }
- $content = preg_replace($_G['setting']['output']['preg']['search'], $_G['setting']['output']['preg']['replace'], $content);
- }
$_G['setting']['output']['preg']['search']数组中保存的数据,类似于
/]*)>/e
对应的$_G['setting']['output']['preg']['replace']中的一条数据为
rewriteoutput('forum_forumdisplay', 0, '1', '3', '5', '6')
这里利用了preg_replace函数的一个特性,当匹配模式中带有e修饰符,用eval进行后向引用替换,即替换变量和执行对应函数。也就是说,preg_replace将匹配到的子串,以参数的形式传入rewriteoutput函数,rewriteoutput函数返回的值作为替换的内容。(页面上有几个链接,将会执行几次rewriteoutput函数,这就是开启伪静态略微影响性能的原因)
问题又来了,伪静态不被替换这是为什么呢?
原因很简单,因为是在页面输出之前才做的替换,所以一切程序上做可能做的手脚都是浮云了。真正起作用的仅仅是输出之前的链接,是不是符合伪静态的替换规则呢。类似于/forum.php?mod=viewthread&tid=XX#lastpost这样的链接自然是无法被成功替换的咯
至此,Discuz伪静态是如何替换并显示的机理就算介绍完毕了。
Discuz!伪静态不管在SEO优化方面,还是在用户体验方面都有很大的帮助,让用户更容易记住地址,更有利于内容页的长尾关键词排名,希望上面的分析对大家使用dz建站有帮助。
魔客吧温馨提示:你正在使用discuz系统建站吗?那来魔客吧的 discuz论坛 频道看看吧,我们制作了很多模板供大家下载哦!
分享到 更多 <script type="text/javascript" id="bdshell_js"></script><script type="text/javascript">document.getElementById("bdshell_js").src = "http://share.baidu.com/static/js/shell_v2.js?cdnversion=" + new Date().getHours();</script> 本文地址:http://www.moke8.com/article-21137-1.html文章标题:discuz二次开发教程:论坛伪静态原理详细分析 收藏邀请 最新分享资源
包装材料生产线设备织梦模板
dedecms模板 by moke响应式淘宝美工摄影类织梦模板
dedecms模板 by moke响应式金属制品dedecms模板
dedecms模板 by moke响应式无人机电子产品dede模板
dedecms模板 by moke最新评论
相关分类
- discuz教程
- discuzx教程
- phpwind教程
- dedecms教程
- phpcms教程
- wordpress教程
- ecshop教程
- php168教程
- shopex教程
- 帝国cms教程
精品推荐
精华 中英双语响应式电子企业织梦模板
dedecms模板 by moke极品资源
极品 高端建筑装饰带手机版十配色织梦模板
dedecms模板 by moke原创模板
魔币 多配色创意metro风格企业
下载排行
- 01包装材料生产线设备织梦模板
资源分类
企业网站模板 企业网站源码 个人网站模板 个人网页模板 手机wap网站 门户网站模板 商业源码 淘宝客程序 html5网站 网站后台模板 html网页模板 学校网站模板 <script type="text/javascript">var cookieLogin = Ajax("TEXT");cookieLogin.get("connect.php?mod=check&op=cookie", function() {});</script><script type="text/javascript">_attachEvent(window, 'load', getForbiddenFormula, document);function getForbiddenFormula() {var toGetForbiddenFormulaFIds = function () {ajaxget('plugin.php?id=cloudsearch&formhash=7754c4ef');};var a = document.body.getElementsByTagName('a');for(var i = 0;i < a.length;i++){if(a[i].getAttribute('sc')) {a[i].setAttribute('mid', hash(a[i].href));a[i].onmousedown = function() {toGetForbiddenFormulaFIds();};}}var btn = document.body.getElementsByTagName('button');for(var i = 0;i < btn.length;i++){if(btn[i].getAttribute('sc')) {btn[i].setAttribute('mid', hash(btn[i].id));btn[i].onmousedown = function() {toGetForbiddenFormulaFIds();};}}}</script>联系我们 | 关于我们 | 招商加盟 | 版权声明 | 帮助中心 | 广告服务 | 网站地图
欢迎浏览魔客吧提供的 discuz二次开发教程:论坛伪静态原理详细分析 信息,若本站中的信息侵犯了您的权益,请与本站管理员联系Copyright @ 2010-2015 魔客吧 版权所有 蜀ICP备09014119号 川公网安备51050202000165号 <script type="text/javascript" src="http://tcss.qq.com/ping.js?v=1VERHASH" charset="utf-8"></script><script type="text/javascript" reload="1">pgvMain({"discuzParams":{"r2":"5238379","ui":0,"rt":"portal","pn":1,"qq":"000"},"extraParams":""});</script>
积分 0, 距离下一级还需 积分 <script type="text/javascript">_attachEvent(window, 'scroll', function(){showTopLink();});</script><script>(function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https'){ bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else{ bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s);})();</script> <script type="text/javascript"> var tipsinfo = '5238379|X2.5|0.6||0||0|7|1526822191|7be001144173784098a86bf78e5930dd|2'; </script> <script src="http://discuz.gtimg.cn/cloud/scripts/discuz_tips.js?v=1" type="text/javascript" charset="UTF-8"></script><script type="text/javascript" src="https://idm-su.baidu.com/su.js"></script>