亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 建站經驗 > 正文

discuz教程:偽靜態功能原理分析

2024-04-25 20:38:40
字體:
來源:轉載
供稿:網友

經??吹秸搲嫌腥嗽儐枺瑸槭裁磦戊o態失效了,為什么列表頁無法實現偽靜態。那么discuz! X2是如何實現偽靜態功能的呢?

為了闡述這個問題,我們從兩個角度入手:

第一,偽靜態是如何作用的?

我們都知道,當我們通過地址訪問一個頁面的時候,訪問的是服務器上的一個實體文件。例如,訪問http://www.xxx.com/index.html, 訪問的是網站根目錄下的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,這樣列表頁肯定不顯示了

如果規則更夸張一些

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'])) {

$_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);

}

這一部分,替換的是當前站點的域名,將寫在模板中的'{CURHOST}'占位符替換為$_G['siteurl']的值。

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']數組中保存的數據,類似于

/<a href/="()forum.php/?mod/=forumdisplay&(amp;)?fid/=(/w+)(&page/=(/d+))?"([^/>]*)/>/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這樣的鏈接自然是無法被成功替換的咯

至此,偽靜態是如何替換并顯示的機理就算介紹完畢了。

偽靜態功能的介紹就先到此,希望能對站長解決偽靜態問題提供一些幫助~

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美国产高跟鞋裸体秀xxxhd| 久久精品国产久精国产思思| 日韩精品中文字幕在线| 欧美床上激情在线观看| 亚洲视频网站在线观看| 精品亚洲精品福利线在观看| 欧美日韩中文字幕| 色一情一乱一区二区| 精品成人在线视频| 国产精品久久久久久久7电影| 欧美精品免费在线| 欧美大成色www永久网站婷| 91av在线视频观看| 高潮白浆女日韩av免费看| 黑人极品videos精品欧美裸| 国产精品欧美风情| 亚洲一区久久久| 97国产suv精品一区二区62| 亚洲国产精品国自产拍av秋霞| 欧美激情精品久久久久久蜜臀| 国产亚洲精品久久久| 国产一区二区三区日韩欧美| 国产午夜精品免费一区二区三区| 亚洲黄一区二区| 日韩精品极品在线观看| 色综合导航网站| 日韩欧美在线一区| 日本最新高清不卡中文字幕| 亚洲精品中文字幕有码专区| 最近2019年好看中文字幕视频| 国产精品久久久久久久久久小说| 深夜福利日韩在线看| 91精品国产沙发| 国产精品视频中文字幕91| 国产一区二区三区视频| www.国产一区| 成人a在线观看| 久久99精品久久久久久琪琪| 欧美日韩加勒比精品一区| 欧美一二三视频| 国产一区红桃视频| 中文字幕视频一区二区在线有码| 国产一区在线播放| 日韩免费高清在线观看| 亚洲一区二区三区777| 欧美日韩国产第一页| 精品国产一区二区三区在线观看| 欧美极品在线视频| 亚洲综合色激情五月| 亚洲自拍欧美色图| 日韩av片电影专区| 欧美日本精品在线| 日韩在线播放av| 亚洲国产精品高清久久久| 欧美精品www在线观看| 91精品成人久久| 国产精品久久97| 欧美成人高清视频| 亚洲欧美激情在线视频| 日韩欧美一区二区在线| 91精品国产91久久| 国产精品视频网站| 国产精品99导航| 91视频国产高清| 国产精品久久激情| 欧美巨乳在线观看| 亚洲视频axxx| 中文字幕日韩欧美在线视频| 亚洲香蕉伊综合在人在线视看| 久久国产加勒比精品无码| 国内精品久久久| 欧美精品福利视频| 川上优av一区二区线观看| 国产精品丝袜久久久久久不卡| 欧洲成人免费aa| 97在线视频观看| 日韩在线播放av| 精品福利视频导航| 91中文精品字幕在线视频| 精品国产1区2区| 精品无人区太爽高潮在线播放| 亚洲精品97久久| 中文字幕国产日韩| 久久亚洲国产成人| 欧美日韩成人免费| 久久亚洲私人国产精品va| 中文字幕免费精品一区高清| 国产日韩在线播放| 亚洲开心激情网| 8090理伦午夜在线电影| 欧美一区亚洲一区| 影音先锋欧美精品| 久色乳综合思思在线视频| 国产一区二区三区在线视频| 日韩不卡在线观看| 欧美亚洲在线播放| 92国产精品视频| 欧美一级片在线播放| 一区二区三区在线播放欧美| 久久国产精品99国产精| 亚洲男人的天堂在线| 91亚洲精华国产精华| 91亚洲国产成人精品性色| 亚洲视频在线观看免费| 亚洲激情视频在线| 欧美成人精品激情在线观看| 亚洲欧美综合另类中字| 91精品国产99久久久久久| 91免费观看网站| 久久亚洲一区二区三区四区五区高| 日韩欧美国产视频| 久久九九有精品国产23| 伦伦影院午夜日韩欧美限制| 欧美日韩亚洲视频| 2021久久精品国产99国产精品| 久久在线免费观看视频| 亚洲夜晚福利在线观看| xx视频.9999.com| 日韩高清a**址| 国产激情视频一区| 国产精品永久免费| 高清在线视频日韩欧美| 久久亚洲春色中文字幕| 国产成人精品一区| 日韩**中文字幕毛片| 亚洲最大激情中文字幕| 亚洲视频在线免费观看| 国产精品日韩久久久久| 国模极品一区二区三区| 97av在线影院| 国产免费一区视频观看免费| 宅男66日本亚洲欧美视频| 欧美孕妇孕交黑巨大网站| 亚洲国产欧美一区二区三区久久| 按摩亚洲人久久| 成人欧美一区二区三区黑人| 久久久久久国产免费| 久久精品视频播放| 国产一区二区色| 另类视频在线观看| 亚洲丝袜av一区| 日韩电影大全免费观看2023年上| 国产99视频在线观看| 成人午夜高潮视频| 欧美日韩国产精品专区| 国产精品黄色影片导航在线观看| 久久久久九九九九| 国产亚洲精品激情久久| 成人乱人伦精品视频在线观看| 久久免费高清视频| 精品亚洲aⅴ在线观看| 亚洲美女喷白浆| 激情懂色av一区av二区av| 日本一区二区在线免费播放| 97国产在线观看| 亚洲人永久免费| 欧美在线性爱视频| 国产精品一二三在线| 亚洲国产精品久久久| 亚洲摸下面视频| 亚洲天堂久久av| 亚洲欧洲午夜一线一品| 日韩人在线观看| 亚洲欧洲日产国码av系列天堂|