2. *.aspxを「PageHandlerFactory-ISAPI-4.0(または-2.0)」もしくは「PageHandlerFactory-Integrated」にマッピングしている設定の行を探して 「Edit」 をクリックし、「Executable」の内容をコピーしておく。
こんな感じか、もしくは
こんな感じになっているはず。
3. 右側の Actions から「Add Script Map...」もしくは「Add Managed Handler...」をクリックし、*.htmlに対するマッピングを追加する。Executable には上でコピーしておいたものをペーストする。
「Script Map」の場合
「Managed Handler」の場合
4. web.configの設定。
今回は下のページに書いてあった、Global.asax内のイベントで自前で変換する方法を使ったので、web.configの設定は特に無し。
Tip/Trick: Url Rewriting with ASP.NET
http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx
5. Global.asax.vb内での処理。
Private Sub Global_asax_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.BeginRequest
Dim fullOrigionalpath As String = Request.Url.ToString()
If fullOrigionalpath.ToLower().EndsWith(".html") Then
Dim sUrl As String = fullOrigionalpath.Substring(0, fullOrigionalpath.Length - 4) & "aspx" '拡張子をaspxに変更。
sUrl = sUrl.Substring(sUrl.IndexOf("//") + 2) '最初のhttp://までを除去
sUrl = sUrl.Substring(sUrl.IndexOf("/")) '次のwww.yourdomainname.comまでを除去
Context.RewritePath(sUrl)
End If
End Sub
Private Sub Global_asax_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.BeginRequest Dim fullOrigionalpath As String = Request.Url.ToString() Dim array() As String = Split(fullOrigionalpath, "?") If array(0).ToLower().EndsWith(".html") Then Dim sUrl As String = array(0).Substring(0, array(0).Length - 4) sUrl &= "aspx" '拡張子をaspxに変更。 sUrl = sUrl.Substring(sUrl.IndexOf("//") + 2) '最初のhttp://までを除去 sUrl = sUrl.Substring(sUrl.IndexOf("/")) '次のwww.hostname.comまでを除去 If array.Length > 1 Then sUrl &= "?" & array(1) 'クエリーストリングがあれば最後に付加 End If Context.RewritePath(sUrl) End If End Sub
以上で取りあえず拡張子.htmlのファイルへのリクエストが.aspxへのリクエストに置き換えられて処理される様になった。
---
追記 1:
BeginRequestハンドラのコードでクエリーストリングがある場合に正しく処理されない問題があったので、上記の様に修正した。
---
追記 2:
「Managed Handler」の場合はIISの管理画面を使わずに web.configの<system.webServer>内の<handlers>タグの中に下記の一行を追加するだけでもOK。
<add name="HTML is handled by ASP.NET" path="*.html" verb="*" type="System.Web.UI.PageHandlerFactory" resourceType="Unspecified" preCondition="integratedMode" />
.