這個(gè)問(wèn)題應該是采用了url 重寫(xiě)轉向,采用了URL REWRITE,apache支持的。
最簡(jiǎn)單的是基于各種WEB服務(wù)器中的URL重寫(xiě)轉向(Rewrite)模塊的URL轉換:
這樣幾乎可以不修改程序的實(shí)現將 news.asp?id=234 這樣的鏈接映射成 news/234.html,從外面看上去和靜態(tài)鏈接一樣。Apache服務(wù)器上有一個(gè)模塊(非缺?。簃od_rewrite:URL REWRITE功能之強大足夠寫(xiě)上一本書(shū)。
當我需要將將news.asp?id=234的映射成news/234.html時(shí),只需設置:
RewriteRule /news/(\d+)\.html /news\.asp\?id=$1 [N,I]
這樣就把 /news/234.html 這樣的請求映射成了 /news.asp?id=234
當有對/news/234.html的請求時(shí):web服務(wù)器會(huì )把實(shí)際請求轉發(fā)給/news.asp?id=234
而在IIS也有相應的REWRITE模塊:比如ISAPI REWRITE和IIS REWRITE,語(yǔ)法都是基于正則表達式,因此配置幾乎和apache的mod_rewrite是相同的:
比對于某一個(gè)簡(jiǎn)單應用可以是:
RewriteRule /news/(\d+)\.html /news/news\.php\?id=$1 [N,I]
這樣就把 http://www.chedong.com/news/234.html 映射到了 http://www.chedong.com/news/news.php?id=234
一個(gè)更通用的能夠將所有的動(dòng)態(tài)頁(yè)面進(jìn)行參數映射的表達式是:
把 http://www.myhost.com/foo.php?a=A&b=B&c=C
表現成 http://www.myhost.com/foo.php/a/A/b/B/c/C。
RewriteRule (.*?\.php)(\?[^/]*)?/([^/]*)/([^/]*)(.+?)? $1(?2$2&:\?)$3=$4?5$5: [N,I]
通過(guò)URL REWRITE還有一個(gè)好處就是隱藏后臺實(shí)現,這在后臺應用平臺的遷移時(shí)非常有用:當從asp遷移到j(luò )ava平臺時(shí),對于前臺用戶(hù)來(lái)說(shuō),更本感受不到后臺應用的變化。
比如我們需要將應用從news.asp?id=234遷移成news.php?query=234時(shí),前臺的表現可以一直保持為 news/234.html。從實(shí)現應用和前臺表現的分離:保持了URL的穩定性,而使用mod_rewrite甚至可以把請求轉發(fā)到其他后臺服務(wù)器上。
聯(lián)系客服