URL重寫已經(jīng)有很多的方法,但是多數(shù)都有一個(gè)缺點(diǎn),就是不支持無擴(kuò)展名的網(wǎng)頁。比如把http://blog.VeVb.com/category_1_1.htm 轉(zhuǎn)換為 http://blog.VeVb.com/category.aspx?id=1。
微軟提供的方法需要在根目錄里面建立jyk的文件夾,然后再建立一個(gè)default.aspx的文件,如果您有100名會(huì)員的話,這是一個(gè)不可想象的事情。
另一個(gè)方法就是使用ISAPI過濾器,但是這個(gè)一般需要在服務(wù)器上安裝一個(gè)DLL文件,自己沒有服務(wù)器就不好辦了。
下面提供一個(gè)可以說是我發(fā)明的一個(gè)方法——不知道以前有沒有人想到過——利用兩個(gè)特性來實(shí)現(xiàn)。
第一個(gè):IIS里面的找不到文件的錯(cuò)誤設(shè)置。
第二個(gè):asp.net 里面的Server.Transfer("topic.aspx?id=jyk");
這兩個(gè)結(jié)合起來就可以達(dá)到我們的目的了。
思路:利用404b錯(cuò)誤捕捉客戶的請(qǐng)求,再使用Server.Transfer轉(zhuǎn)向。
在我們?cè)L問http://www.aaa.com/jyk 的時(shí)候,假設(shè)這時(shí)服務(wù)器上沒有jyk文件夾,那么會(huì)返回什么結(jié)果呢?會(huì)返回一個(gè)“無法找到該頁”的頁面,那么這個(gè)返回結(jié)果能不能自己控制一下呢?很幸運(yùn)IIS提供了這個(gè)功能,我們可以把這樣的錯(cuò)誤指定到網(wǎng)站里的一個(gè)頁面。
操作步驟:
第一步:打開IIS管理器,網(wǎng)站屬性——自定義錯(cuò)誤標(biāo)簽——404錯(cuò)誤——點(diǎn)擊修改——修改“消息類型”為“URL”,在下面的文本框里填寫處理這個(gè)錯(cuò)誤得頁面名稱,比如/none.aspx。

第二步:在我們的網(wǎng)站根目錄下建立一個(gè)none.aspx的網(wǎng)頁。在里面隨意寫點(diǎn)內(nèi)容(測試用)。
設(shè)置完畢,這時(shí)再訪問http://www.aaa.com/jyk,顯示的就是 none.aspx的網(wǎng)頁內(nèi)容了。注意這時(shí)瀏覽器里面的URL地址仍然是http://www.aaa.com/jyk,而不是http://www.aaa.com/none.aspx 。這一點(diǎn)很重要,如果地址變了,那就沒有意義了。
那么我們?cè)趺窗秧撁孓D(zhuǎn)到我們希望的頁面呢,這時(shí)所有的找不到文件的情況都會(huì)轉(zhuǎn)到none.aspx文件,顯然這不是我們想要的最終結(jié)果。那么我們?cè)趺传@取客戶輸入的網(wǎng)址呢?
打開none.aspx的后臺(tái)文件,
string URL = Request.Url.Query;
我們可以使用上面的語句來獲取URL地址,得到的地址格式是:
?404http://www.aaa.com/jyk
其中 “?404”是固定的,過濾掉它就是瀏覽器里面的URL地址了。
剩下的事情就是根據(jù)情況來轉(zhuǎn)換網(wǎng)頁了。可以拆串,再用switch來判斷;也可以用正則表達(dá)式來判斷。因?yàn)槲艺齽t不熟,我采用的是switch的方式。正則表達(dá)式請(qǐng)參考其他的資料,我也在找,如果您找到了請(qǐng)共享一下,謝謝。
優(yōu)點(diǎn):
1、 支持無擴(kuò)展名的網(wǎng)頁。不用建立文件夾和文件。
2、 思路簡單,用法也很簡單,代碼也不復(fù)雜,不涉及高深的理論;
3、 支持搜索引擎,就是說可以被各大搜索引擎搜錄。
4、 可以配合域名泛解析使用。
缺點(diǎn):
1、 需要修改一下IIS 404b錯(cuò)誤的處理方法;
2、 效率要略微低一點(diǎn)。
3、 如果您只使用.aspx的擴(kuò)展名的話就可以不用修改IIS了。
4、 Asp不支持。因?yàn)閍sp的Server.Transfer不能帶參數(shù)(?id=jyk),不能傳遞參數(shù)的重寫幾乎沒有什么意義。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注