1

予期しない動作に遭遇しました:

次のステートメントは正常に機能します。

Context.RewritePath( "~/Default.aspx" );  // redirect to default doc, explicitly

これにより、404 エラーが発生します。

Context.RewritePath( "~/" );  // redirect to default doc, implicitly

/URL の書き換えを行わずにブラウザーからドキュメントを読み込むと、ドキュメントが正しく読み込まれるため、IIS が正しく構成されていると考えられ//Default.aspx実際に同じドキュメントを参照しています。

時間の経過とともに IIS で既定のドキュメント名が変更される可能性があるため、後者のステートメントを使用したいと思います。ソリューションには、IIS から既定のドキュメント名を取得するための何らかの方法が含まれていると思いますが、そのような方法を見つけることができませんでした。

だから私の質問は: URL を書き換えるときに既定のドキュメントを指定する正しい方法は何ですか?

4

1 に答える 1

4

問題は、制御をasp.netに渡す前に、IISが「デフォルトドキュメント」のパス変換を処理することです。

ブラウザーがファイル名のない URL を要求すると、IIS はそのサイト用に構成された "既定のドキュメント" の一覧を確認します。次に、構成された既定のドキュメントの名前と一致する、要求されたパス内の物理ファイルを探します。次に、ディスク上に物理的に存在する最初の一致する既定のドキュメントを返します。

この後、要求されたファイルが asp.net ファイルの場合は、asp.net ランタイムが呼び出され、処理が asp.net に渡されます。

URL の書き換えは、asp.net プロセス内で行われます。デフォルト ドキュメントなどに関する IIS の設定は認識されません。完全にasp.net内で行われるURL書き換えのような手法を使用すると、デフォルトのドキュメントなどを使用できなくなります。そのため、常にページ名を使用して書き直してください。

于 2009-10-06T23:24:38.983 に答える