HDwiki百科建站講座第三期 :apache、iis下的rewrite規則

來源:互聯網
上載者:User

仲介交易 SEO診斷 淘寶客 雲主機 技術大廳

大家好,「HDwiki百科建站講座第三期」現在正式開始~~,今天,邀請到我們的嘉賓是李光明(論壇ID:wanner),他將就「apache、iis下的rewrite規則」的話題與各位站長朋友進行交流,下面, 以熱烈的掌聲有請wanner

1、偽靜態簡介

偽靜態就是:動態網頁通過重寫URL的方法實現去掉動態網頁的參數,但在實際的網頁目錄中並沒有必要實現存在重寫的頁面。

偽靜態的目的

最主要的就是迎合搜尋引擎方便搜尋引擎蜘蛛(Spider)來抓取網頁上的相關內容!方便使用者訪問網站 一個好網頁如果是動態的使用者在相互傳播時感覺對方信任度不會高但一看一個靜態頁相對使用者對網頁的信任度就高點而且偽靜態的尾碼方式基本雷同 一看就知道是偽靜態還是真的靜態網頁!偽靜態對SEO有利,收錄比動態會更好。

2、設置偽靜態的要求

設置偽靜態的要求,不同的伺服器要求不一樣,apache需要rewrite模組,iis需要安裝ISAPI_rewrite軟體. (若是虛擬主機,可向空間商諮詢),獨立主機的可以自行設置,一般apache預設都會有rewrite模組並開啟,如果沒開啟,可打開apache的設定檔HTTPd.conf檔,LoadModule rewrite_ module modules/mod_rewrite.so,將前面的井號去掉保持重啟apache即可以下重點說說iis的ISAPI_rewrite軟體。

l 在 IIS 管理器裡選擇網站,右鍵選擇「屬性」,如圖一

  

l 選擇你的網站,比方是預設網站,按右鍵,選擇屬性,如圖二

  

l 查看isapi篩選器

  

l 添加ISAPI篩選器,要選擇的isapi.dll可以在網上下載得到

  

  

  

l 確定後查看剛剛添加是否成功

  

當狀態時綠色向上的箭頭的時候表示添加成功了,當rewrite環境配置好後就可以開啟rewrite了。

3、開啟偽靜態

當確認已經安裝rewrite模組後,便可開啟hdwiki後臺的rewrite規則了,apache使用者開啟後一般不會存在什麼問題,系統已經自動生成了.htaccess檔, iis使用者需要在論壇目錄下手動添加HTTPd.ini檔(虛擬主機使用者可諮詢空間商該檔存在的位置),具體可參考HTTP://kaiyuan.hudong.com/bbs/viewthread.php?tid=10341 &extra=&highlight=iis%2B&page=1,該貼是4.0.5的規則,不過這個是通用規則,4.1同樣適用,如果要全部單獨寫出的規則,可參考HTTP:// kaiyuan.hudong.com/bbs/viewthread.php?tid=13330&highlight=rewrite

4、rewrite規則

hdwiki4.1的手冊中有apache,iis和nginx三種伺服器下的rewrite規則

l apache下的規則

RewriteEngine on #表示開啟rewrite

RewriteBase /hdwiki4/wikiframe/ #設置目錄級重寫的基準URL,指網站的路徑

RewriteCond %{REQUEST_FILENAME} !-f #RewriteCond是指定義重寫發生的條件,就是說一個RewriteRule 前面可以有多個RewriteCond,就是說,當符合RewriteCond 時,後面的RewriteRule 才會去執行,%{REQUEST_FILENAME}表示請求的檔案名 !表示非 -f表示常規檔 ,該句表示請求的檔案名為一個非常規檔時繼續執行,否則不執行(常規檔時指a.txt這樣的, 可以直接下載的那種檔)

RewriteCond %{REQUEST_FILENAME} !-d #該句表示請求的檔案名不是一個目錄繼續執行RewriteRule ^.*$ index.php?$0 #當上面兩個條件都符合了,才會執行這條規則,該規則指,例如 abc會被指向index.php?abc

以上這些代碼中,有很多正則運算式,就RewriteRule ^.*$ index.php?$0為例做講解 ^表示以什麼什麼開始 ,比方^a 表示以a字元開始 ,'.' 點這個字元時萬用字元,表示任一字元,*表示前面的運算式0到n個,.*表示0個或n個任一字元,$表示以什麼結束,b$表示以b字元結束 $0表示匹配上的所有字元再看這個實例

RewriteRule ^/wiki/(.*)$ /index\.php\?doc-innerlink-$1

這個裡面有$1表示^/wiki/(.*)$這個裡面括弧中匹配的字串,如果後面還有括弧的,就是$2$3....iis的rewrite規則基本和這個一樣,ISAPI高版本中相容上述寫法,具體的可參考手冊,另外要注意的是, 很多iis的使用者將hdwiki的規則和其他系統如discuz的規則寫在了一起,導致iis衝突,一般可以通過資料夾名稱來區別

例如,有些使用者在HTTPd.ini中這樣寫

RewriteRule ^/(.*)/(.*)\. (htm|html|shtml|tpl|asp|jsp|php|do)$ /baike/index\.php\?$1可以改為RewriteRule ^/baike/(.*)\. (htm|html|shtml|tpl|asp|jsp|php|do)$ /baike/index\.php\?$1還有好多使用者iis下不是用的這種通用寫法,而是和dz一樣寫的是具體的,比如RewriteRule ^/ baike/doc-view-(.*)$ /baike/index\.php\?doc-view$1這種寫法完全可以,唯一不方便的就是如果hdwiki在新添加的功能,這個url可能無法被解析, 因為沒有相應的規則對應大家可以依葫蘆畫瓢照著寫一個就可以了

l nginx下的寫法

if ($request_filename !~* (.*)\.( css|js|gif|jpg|png|xml)){

# 修改以下語句中的 /hdwiki 為你的HDWiki目錄位址,如果程式放在根目錄中,請將 /hdwiki 修改為 /

rewrite ^(/hdwiki)/(.*)$ $1/index.php?$2;

}

僅開啟以 HTTP://mydomain/詞條名 的rewrite規則,則添加如下代碼:

# 修改以下語句中的 /hdwiki 為你的HDWiki目錄位址,如果程式放在根目錄中,請將 /hdwiki 修改為 /

rewrite ^(/hdwiki)/wiki/(.*)$ $1/index.php?doc-innerlink-$2 last;

其他伺服器的rewrite規則,都是用正則運算式表示,寫法略有不同

例如ligHTTPd的寫法如下(HTTP://kaiyuan.hudong.com/bbs/viewthread.php?tid=13353&highlight=rewrite)

url.rewrite = (

"^(.*)\/(attachment|category|comment|doc|edition|list|pms|reference|search|synonym|user|plugin|admin|pic|gift) ([^\/]*)$" => "$1/index.php?$2$3"

)

5、偽靜態的缺點

流量稍大一些使用偽靜態就出現CPU使用超負荷,由於偽靜態是用正則判斷而不是真真實位址,分辨到底顯示哪個頁面的責任也由直接指定轉由CPU來判斷了,所以CPU佔有量的上升,確實是偽靜態最大的弊病. 不過對於流量不大,但需要收錄量的個人網站來說,偽靜態算是個不錯的選擇

6、關閉hdwiki偽靜態

當偽靜態無法正常使用時,部分使用者反映無法正常登錄到後臺關閉偽靜態,新補丁中確保開啟rewrite偽靜態也能正常登錄,可下載4.1的補丁包對於沒有升級或沒有打補丁的而無法登陸的同學,可以使用工具箱登陸到後臺

主持人:

感謝光明的精彩回答,本次講座到此結束。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.