web developer 2008でデバッグした際には動作するが、本番用のWEBサーバーに置いてアクセスすると404エラーになる問題が発生しています。Global.asaxのソースを提供します。
Global.asaxが無視される
ASP.NETでWEBアプリを作っています。言語はVBです。
クエリ文字列つきアドレスを固定アドレスに見せかけるロジックを使いたいと思い、
Global.asaxにそのコードを書きました。
※ ttp://aaa/details.aspx?A=1&B=2&C=3&D=4&E=5 を、
ttp://aaa/details/1-2-3-4-5 と書いてもアクセスできるような仕組みのことです
開発環境はMicrosoft visual web developer 2008 expressです。
しかし、web developer 2008でデバッグした際にはきちんと動いてくれるのですが、
ソースを本番用のWEBサーバーに置いて details/1-2-3-4-5 アドレスにアクセスすると404エラーとなります。
どこが悪いのでしょうか?
以下、Global.asaxのソースを書きます。
***************
<%@ Application Language="VB" %>
<script runat="server">
Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs)
Dim curPath As String = Request.Path.ToLower()
Dim newPath As String = ""
Dim fileArray As Array
'拡張子がaspx
If (System.IO.Path.GetExtension(curPath) = "") Then
Dim fileName As String = System.IO.Path.GetFileNameWithoutExtension(curPath) 'ファイル名取得
Dim fileDir As String = System.IO.Path.GetDirectoryName(curPath) 'ディレクトリ名取得
'分岐させる必要がある場合は、分岐条件を書く
fileArray = Split(fileName, "-")
If fileArray.Length = 5 Then
fileName = "A=" & fileArray(0) & "&B=" & fileArray(1) & "&C=" & fileArray(2) & "&D=" & fileArray(3) & "&E=" & fileArray(4)
End If
'飛ばし先のパス
newPath = String.Format("{0}.aspx?{1}", fileDir, fileName)
End If
'ReWrite the URL
If (newPath <> "") And InStr(curPath, "index.aspx") = 0 And InStr(curPath, "details.aspx") = 0 Then
Context.RewritePath(newPath)
End If
End Sub
</script>
***************
よろしくお願いします。
お礼
具体的なアドバイスありがとうございます! これだけでは404エラーのままだったのですが、IISでもう1つ設定を変えると動くようになりました。 以下にその方法を書きます。 1.IISマネージャーを開く 2.「アプリケーションプール」を選択 3.「マネージパイプラインモード」が「クラシック」のプールの詳細設定を開く 4.「32ビットアプリケーションの有効化」という項目をFalseからTrueにする WEBサーバにしているWindowsが64ビットですと、さらに上記の設定が必要なようです。 32ビットであればsato18様に教えていただいた設定だけで十分でした。 大変助かりました。