我們正在爲客戶端重寫一箇舊網站,從經典ASP到ASP.NET 4。新網站一旦推送到現場,將與舊網站保持一致的根網址。將asp URL映射到aspx Http [Handler/Module]
儘管這是一個規定......舊網站曾經使用頁面(如article.asp?articleid=###
)加載內容。新網站將使用類似的東西,但使用ASP.NET路由,例如~/articles/o/###
('o'用於'舊ID')。
我需要能夠接收到舊的article.asp
頁面的請求,並將url重寫爲新的article.aspx
url。
我最初的想法是在Application_BeginRequest
中處理這個問題。我重新映射.asp擴展到由相同的處理DLL .ASPX頁處理,然後在我的global.asax
下面的代碼添加到我的Application_BeginRequest
:
Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
Dim ctx = HttpContext.Current, url = ctx.Request.RawUrl
If Regex.IsMatch(url, "/article\.asp\?articleid=\d+") Then
Dim oldid = Regex.Match(url, "(?:articleid=)(\d+)").Groups(1).Value
Server.Transfer("~/articles/o/" & oldid)
End If
End Sub
這並沒有工作,雖然。因爲這是現在,我需要在路徑中有一個實際的article.asp
,否則我會得到一個錯誤(並且即使它然後它實際上沒有做任何事情,只顯示一個空白頁)。這將工作正常(假設ASP頁面中的重定向代碼工作),除了他們在自己的子目錄中有500個副本article.asp
(打破了CMS模型的全部要點)。他們希望保留舊網址,以防有人通過電子郵件或書籤點擊舊網址。
我需要能夠將此文件名映射到新路徑,無論其所在的子目錄如何,根據上述我的Application_BeginRequest
中的邏輯。什麼是正確的方法來做到這一點?由於global.asax
不工作,我假設我需要寫一個HttpHandler
或HttpModule
類,但我不確定哪個是正確的路。
在Windows Server 2003 R2上運行IIS。
謝謝!
哪個webserver?在asp.net中處理.asp頁面是您的web服務器的配置問題,而不是asp.net的問題。 – 2011-03-15 20:30:47
已在服務器上添加信息...對此感到抱歉。我確實有IIS配置來處理與ASPX處理程序的ASP頁面,但我需要弄清楚如何以及在哪裏正確地捕捉請求,以便我可以將其重寫爲新的CMS模型。 – eidylon 2011-03-15 20:35:15
因此,您的上述代碼正在爲每個請求執行,但是您需要幫助來調整正則表達式以匹配對任意子文件夾中的asp文件的請求? – 2011-03-15 20:39:10