以前在開發系統時,也有一個門戶的部分,當時考慮到系統的性能問題也使用靜態化頁面,但並不是傳統的html頁面,而是xml+xsl文件的組合,這樣改變xsl文件後整個網站也就隨之改變了,達到了內容與顯示的分離,同時也實現了靜態化。當然了,那個門戶基本上都是新聞發佈之類的,對於其內容的更新不是非常多,所以這樣處理就很方便和實用了。剛剛也說到了使用僞靜態化似乎是大型網站的更好的選擇,因爲不需要維護大量的靜態文件。我們可以看到對於淘寶、163、sohu等網站,雖然其新聞頁面和寶貝頁面是html後綴的,但是同時也看到其內容應該是屬於動態更新的,要不然,還真是無法想象。所以可以想到,目前的大型網站幾乎很少用靜態頁面來訪問的,多數是基於僞靜態化的訪問方式。僞靜態化就是說訪問地址看上去其後綴是html或htm等形式,但其內容實際上是動態生成的。那麼如何實現網站的僞靜態化呢?這個也是我下面要說的,就是URL的rewrite,即URL的重寫技術。
我們以apache2.2爲例來說下如何實現url的rewrite,首先要給apahce2安裝rewrite模塊,操作步驟如下:
#cd /home/
#tar xf httpd-2.2.6.tar.gz
#cd httpd-2.2.6
#./configure --prefix=/usr/local/apache2.2 --enable-so --with-mpm=worker --enable-module=rewrite --enable-shared=rewrite
#make && make install
#cd modules/mappers/
#/usr/local/apache2.2/bin/apxs -c mod_rewrite.c -lgdbm
#gcc -shared -o mod_rewrite.so mod_rewrite.o -lgdbm
#/usr/local/apache2.2/bin/apxs -i -A -n rewrite mod_rewrite.so
這樣我們就安裝好了apache的rewrite模塊,然後我們就可以使用正則式來匹配url並替換了。apache使用rewrite模塊的格式如下:
RewriteEngine On #開啓rewrite模塊
RewriteRule 源地址的正則式 rewrite後的真實地址
通常對於如下的動態地址我們可以使用相應的靜態地址進行重寫,如下:
/bbs/list-4-1.html /mybbs/show-topic.do?border=4&page=1
這樣我們在apache中就可以這樣寫入:
RewriteRule ^/bbs/list-([0-9]+)-([0-9]+)\.html$ /mybbs/show-topic.do?border=$1&page=$2 [pt]
像上面的地址我們就是將所有/bbs/list-4-1.html這樣的地址匹配成/mybbs/show-topic.do?border=4&page=1這樣的動態地址,同時轉給tomcat來進行處理(rewriteRule後的[pt]標誌)。我們假設以靜態頁面爲例子的話,同時假設apache的網站根路徑是/www/test/,我們在根目錄下建立123.html文件,然後在apache的配置文件中寫入如下的重寫規則:
RewriteRule ^/show/news-([0-9]+)\.html$ /$1.html
這樣,當我們訪問/show/news-123.html的時候,就會被apache重寫爲/123.html,也就是訪問到根目錄下的123.html文件了,如果有246.html文件在根目錄下,那麼我們就可以訪問/show/news-246.html了。
通過url的rewrite技術,我們可以很方便的來僞靜態化網站,同時又實現動態的內容,而且對於seo也有一定的幫助,呵呵~~~另外,在lighttpd中使用rewrite也是非常方便,正則式基本上差不多。