簡易的 Url Rewriting 隱藏 Querystring (二) IIS 注意事項
在上一次介紹【簡易的 Url Rewriting 隱藏 Querystring】文章中,介紹如何使用 來隱藏 QueryString,如果有試著嘗試 Url Rewriting 或是眼尖的網友,會可能會發現我沒有對 IIS 另外做一些設定。
其實,在 IIS 中我少了在【應用程式設定】設定【應用程式副檔名設定】。少了這一項設定,就會發生一些情況,
例如:
<rewriter>
<rewrite url="~/Books/(\d+)/Default.html" to="~/Books.aspx?bookID=$1"/>
</rewriter>
以上面這段語法來說,表示如果程式將頁面導向 http://localhost/TestSite35/Books/456/Default.html 的網址,其實真正執行頁面得程式是在 http://localhost/TestSite35/Books.aspx?bookID=456 。可是,當我們程式去執行時卻不如我們所預期,會出現以下錯誤畫面:
這是因為 IIS 不知道 .html 副檔名的頁面,其實是 ASP.Net 2.0 要去處理的頁面,何況我們根本也沒有 Default.html 這個頁面,當然會發生問題。
以下開始講解如何設定 IIS 設定
以 Windows XP Professional 版本 IIS 5.1 版本來說明。打開 IIS 管理員,然後在虛擬目錄上按下滑鼠右鍵,並選擇【內容】:
然後在【虛擬目錄】Tab 頁面,點擊【應用程式設定】的【設定】按鈕,然後會出現【應用程式設定】視窗。
Windows Server 2003 Professional 版本以上, IIS 6.0 環境設定,打開 IIS 管理員,然後在欲設定的網站上按下滑鼠右鍵,並選擇【內容】:
然後在【主目錄】Tab 頁面,點擊【應用程式設定值】的【設定】按鈕,然後會出現【應用程式設定】視窗。
在【應用程式設定】視窗中,點擊【新增】按鈕,然後增加對【.html】檔案的處理對應:
- 執行檔案,利用【瀏覽】按鈕填入【C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll】
- 副檔名,填入【.html】
- 指令動詞,限制於填入【GET,HEAD,POST,DEBUG】
- 勾選【指令碼引擎】
- 取消勾選【檢查該檔案是否存在】
- 按下【確定】按鈕即可
這時,我們重新執行我們的頁面,Url Rewriting 的功能又出現了: