2009-05-12 23 views
1

古いPHP Webサイトを新しいASP.NET MVC Webサイトに置き換えました。古いページのアドレスは機能しなくなりました。 301(Moved Permanently)のリダイレクトを特定の新しいアドレスにリダイレクトする必要があります。IISがASP.NET MVCアプリケーションの外部に404エラーを投げる

しかし、IIS 7はアプリケーションに入る前に、多くのリクエストを傍受しているようです。私は、エラーログとリダイレクトを、Global.asaxファイルのApplication_Error()メソッドで処理したいのではなく、IISが一般的なエラーページを提供するようにしたい。

これを許可するにはIISをどのように変更する必要がありますか?

+0

関連する質問:http://stackoverflow.com/questions/108813/404-http-error-handler-in-asp-net-mvc-rc-5 –

答えて

1

MVCではこれがエラーとは見なされない(つまり例外は発生しません)が、単にルートに一致しないため、通常通りIISが404を処理できるようになります。これをコードで処理するには、ルーティングリストの最後にワイルドカードルートを追加します。

Global.asax.vb…

routes.MapRoute(_ 
    "FileNotFound", _ 
    "{*key}", _ 
    New With {.controller = "FileNotFound", _ 
       .action = "Http404"} _ 
) 

FileNotFoundController.vb…

Function Http404(ByVal key As String) As ActionResult 
    Dim RedirectId As Guid 
    Select Case key 
     Case "someold/path/andfile.php" 
      RedirectId = New Guid("68215c26-0abe-4789-968e-0187683409b6") 
     Case Else 
      RedirectId = Guid.Empty 
    End Select 
    If Not RedirectId = Guid.Empty Then 
     Response.StatusCode = Net.HttpStatusCode.MovedPermanently 
     Response.RedirectLocation = Url.RouteUrl("SomeOtherRoute", New With {.id = RedirectId}) 
    Else 
     Throw New Exception("Unable to resolve route.") 
    End If 
    Return Nothing 
End Function 

これにより、意図したURLを見て、それをリダイレクトするターゲットURLを決定できます。

また、カスタム404ハンドラページを実装して、IISで直接設定することもできます。そのページ/コントローラのコードでは、意図したURLを見て、必要に応じてリダイレクトすることができます。

関連する問題