2011-03-15 73 views
0

我們正在爲客戶端重寫一箇舊網站,從經典ASPASP.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不工作,我假設我需要寫一個HttpHandlerHttpModule類,但我不確定哪個是正確的路。

在Windows Server 2003 R2上運行IIS。

謝謝!

+0

哪個webserver?在asp.net中處理.asp頁面是您的web服務器的配置問題,而不是asp.net的問題。 – 2011-03-15 20:30:47

+0

已在服務器上添加信息...對此感到抱歉。我確實有IIS配置來處理與ASPX處理程序的ASP頁面,但我需要弄清楚如何以及在哪裏正確地捕捉請求,以便我可以將其重寫爲新的CMS模型。 – eidylon 2011-03-15 20:35:15

+0

因此,您的上述代碼正在爲每個請求執行,但是您需要幫助來調整正則表達式以匹配對任意子​​文件夾中的asp文件的請求? – 2011-03-15 20:39:10

回答

1

把上面的代碼放在Application_BeginRequest方法global.asax實際上是一個合適的地方。這個問題在IIS中還有一個缺失的設置。在重新映射.ASPASP.NET處理程序的對話框中,還需要確保關閉的選項驗證文件是否存在。這完成了程序,我的舊頁面現在映射到相應的新頁面。