URL重寫已經有很多的方法但是多數都有一個缺點就是不支持無擴展名的網頁比如把 轉換為 x?id=
微軟提供的方法需要在根目錄裡面建立jyk的文件夾然後再建立一個defaultaspx的文件如果您有名會員的話這是一個不可想象的事情
另一個方法就是使用ISAPI過濾器但是這個一般需要在服務器上安裝一個DLL文件自己沒有服務器就不好辦了
下面提供一個可以說是我發明的一個方法——不知道以前有沒有人想到過——利用兩個特性來實現
第一個IIS裡面的找不到文件的錯誤設置
第二個 裡面的ServerTransfer(topicaspx?id=jyk)
這兩個結合起來就可以達到我們的目的了
思路利用b錯誤捕捉客戶的請求再使用ServerTransfer轉向
在我們訪問 的時候假設這時服務器上沒有jyk文件夾那麼會返回什麼結果呢?會返回一個無法找到該頁的頁面那麼這個返回結果能不能自己控制一下呢?很幸運IIS提供了這個功能我們可以把這樣的錯誤指定到網站裡的一個頁面
操作步驟
第一步打開IIS管理器網站屬性——自定義錯誤標簽——錯誤——點擊修改——修改消息類型為URL在下面的文本框裡填寫處理這個錯誤得頁面名稱比如/noneaspx
第二步在我們的網站根目錄下建立一個noneaspx的網頁在裡面隨意寫點內容(測試用)
設置完畢這時再訪問x的網頁內容了注意這時浏覽器裡面的URL地址仍然是而不是x 這一點很重要如果地址變了那就沒有意義了
那麼我們怎麼把頁面轉到我們希望的頁面呢這時所有的找不到文件的情況都會轉到noneaspx文件顯然這不是我們想要的最終結果那麼我們怎麼獲取客戶輸入的網址呢?
打開noneaspx的後台文件
string URL = RequestUrlQuery
我們可以使用上面的語句來獲取URL地址得到的地址格式是
?
其中 ?是固定的過濾掉它就是浏覽器裡面的URL地址了
剩下的事情就是根據情況來轉換網頁了可以拆串再用switch來判斷也可以用正則表達式來判斷因為我正則不熟我采用的是switch的方式正則表達式請參考其他的資料我也在找如果您找到了請共享一下謝謝
優點
支持無擴展名的網頁不用建立文件夾和文件
思路簡單用法也很簡單代碼也不復雜不涉及高深的理論
支持搜索引擎就是說可以被各大搜索引擎搜錄
可以配合域名泛解析使用
缺點
需要修改一下IIS b錯誤的處理方法
效率要略微低一點
如果您只使用aspx的擴展名的話就可以不用修改IIS了
Asp不支持因為asp的ServerTransfer不能帶參數(?id=jyk)不能傳遞參數的重寫幾乎沒有什麼意義
From:http://tw.wingwit.com/Article/program/net/201311/12601.html