isapi_rewrite重寫在asp.net4.0+IIS6錯誤的解決方法
使用isapi_rewrie 3.x 對網站進行URL重寫,環境為 Asp.net4.0、IIS6.0。
RewriteRule ^/([a-z0-9_-]+)/$ /Cate.aspx?N=$1 [NC]
但是在實踐中一直顯示404錯誤。
原因如下:
因為ASP.NET4.0在安裝的過程中,已經在IIS6做了一些手腳,讓它可以原生的支援的無字尾的URL請求,那麼它究竟是做了什麼事情呢?在實現這個功能的作者Thomas Marquardt的這篇部落格上的一段話解釋了它的工作原理,大概是這樣的:
ASP.NET 4.0在安裝的時候,會在IIS6註冊一個ISAPI Filter,叫做”aspnet_filter.dll”,ISAPI Filter會先於ISAPI處理程式前執行,它會在所有的的無字尾的URL後面加一串字元“/eurl.axd/GUID”, 同時ASP.NET 4.0還會在IIS預設新增一個請求對映規則“*.axd”,對映到aspnet_isapi.dll。此時,所有的無字尾URL加上“/eurl.axd/GUID”後都會變成帶.axd字尾,這樣就匹配*.axd的對映規則進行ASP.NET的處理通道。在進入ASP.NET通道後,ASP.NET處理程式會刪除掉“/eurl.axd/GUID”,讓它還原到無字尾的原始情況,並且不會對後續的請求處理帶來任何影響。此時,所有的無字尾請求,就進入了ASP.NET的處理通道中,在預設情況下,ASP.NET4.0的全域性的web.config中配置了DefaultHttpHandler來接收無字尾的URL請求,但是我們也可以隨意更換預設處理程式(比如ASP.NET MVC處理程式)來處理無字尾的URL請求。
從上面的解釋中, 我們不難看到,這與IIS7的整合模式有本質的不同,它並不是很原生的處理方案。不得不說,這並不是一個非常流暢的解決方案,也許這也是不得以之下的非常之舉。但是其實在沒有ASP.NET MVC以前,對無字尾的URL請求的支援並不是那麼迫切需要。即使有需要,也是通過一個URL Rewriter元件,而因為首先要進入ASP.NET 處理通道,所以這種URL Rewriter元件也需要ISAPI級別的擴充套件。當我們在ASP.NET 4.0的程式中,需要用類似的元件的時候,可能就會需跟上面的功能有所衝突,此時,我們可能就會需要禁用ASP.NET4.0對無字尾URL請求的這個功能。這時候你可能修改登錄檔相關鍵值(並重啟IIS),或者是刪除aspnet_filter.dll的註冊(因為在這步增加了/eurl.axd/GUID)。
解決方法:
開啟登錄檔找到“HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\ASP.NET\\4.0.30319.0”,新增鍵值名為“EnableExtensionlessUrls” 型別為“DWORD”的鍵值,並設定值為“0”。然後在cmd中執行“IISRESET”,重啟IIS以讀取登錄檔修改後的內容。注:此項修改就是關閉 ASP.NET 4.0對無擴充套件URL的處理,若將此項鍵值設為“1”則開啟。
相關文章
- steam磁碟寫入錯誤怎麼解決 steam磁碟寫入錯誤解決方法大全
- ISAPI_Rewrite中文變亂碼的解決方法API
- 隨身碟出現防寫錯誤的解決方法
- undefined reference to錯誤的解決方法Undefined
- PHP錯誤“Thisfilehasexpired”的解決方法PHP
- PbootCMS 404 錯誤解決方法boot
- 錯誤Namenodeisinsafemode的解決方法
- win10系統提示遇到錯誤需要重啟的解決方法Win10
- 使用ISAPI_REWRITE限定主機頭做重寫API
- vsftpd 錯誤:530 and 500 錯誤解決方法FTP
- 在 Linux 上找出並解決程式錯誤的主要方法(轉)Linux
- AFNetworkingErrorDomain 錯誤解決方法ErrorAI
- dbfread報錯ValueError錯誤解決方法Error
- linux系統重啟網路delaying initialization錯誤的解決方法Linux
- standby新增檔案錯誤的解決方法
- MYSQL中 TYPE=MyISAM 錯誤的解決方法MySql
- Mac上搭建chromedriver的錯誤解決方法MacChrome
- nginx出現403錯誤的解決方法Nginx
- XP系統出現記憶體讀寫錯誤解決方法記憶體
- Linux中常見的檔案讀寫錯誤問題及解決方法!Linux
- HTTP 錯誤 500.19- Internal Server Error 錯誤解決方法HTTPServerError
- 【Oracle】ORA-00054 錯誤解決方法Oracle
- Android錯誤解決方法集錦Android
- hadoop日常錯誤解決方法整理Hadoop
- ORA-04098錯誤解決方法
- ORA-25154錯誤解決方法
- npm WARN unmet dependency錯誤解決方法NPM
- ORA-01950錯誤的解決方法
- Ajax中“Sys未定義”錯誤的解決方法
- Python錯誤重試方法Python
- 寬頻連線錯誤691解決方法
- ORA-14452錯誤及解決方法
- ubuntu網路卡啟動錯誤解決方法Ubuntu
- IMP-00098 錯誤及解決方法
- Nginx報504 gateway timeout錯誤的解決方法NginxGateway
- oracle ORA-12899錯誤的解決方法Oracle
- ORA-01578錯誤的解決方法 ( 二)
- Oracle 常見的錯誤問題及解決方法Oracle