整理下apache、iis下的rewrite規則自己留著備用!做網站的,現在遇見最多的是動態網站,但是動態網站也遇到了一個最大的問題就是偽靜態,為了搜索引擎的快速收錄吧,畢竟搜索引擎對于靜態頁面還是很感興趣的,本人最近在搞一個已經很少的人在玩的程序hdwikicms,現在已經沒有官方人員違護了,所以導致遇到的問題沒法解決,今天把我遇到的問題自己整理下備以后用吧!
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軟件,
在 IIS 管理器里選擇網站,右鍵選擇“屬性”,如圖一
選擇你的站點,比方是默認站點,右鍵單擊,選擇屬性,如圖二
查看isapi篩選器
添加ISAPI篩選器,要選擇的isapi.dll可以在網上下載得到
當狀態時綠色向上的箭頭的時候表示添加成功了,當rewrite環境配置好后就可以開啟rewrite了。
3、開啟偽靜態 當確認已經安裝rewrite模塊后,便可開啟hdwiki后臺的rewrite規則了,apache用戶開啟后一般不會存在什么問題,系統已經自動生成了.htaccess文件, iis用戶需要在論壇目錄下手動添加httpd.ini文件(虛擬主機用戶可咨詢空間商該文件存在的位置)。
4、rewrite規則 hdwiki4.1的手冊中有apache,iis和nginx三種服務器下的rewrite規則
apache下的規則
<IfModule mod_rewrite.c>
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 </IfModule> 以上這些代碼中,有很多正則表達式,就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可能無法被解析,因為沒有相應的規則對應,大家可以依葫蘆畫瓢照著寫一個就可以了
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的寫法如下(
xxx/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的補丁包 對于沒有升級或沒有打補丁的而無法登陸的同學,可以使用工具箱登陸到后臺。