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

您的问题是 IIS 在将控制权移交给 asp.net 之前处理“默认文档”的路径转换。

当浏览器请求没有文件名的 URL 时,IIS 将检查为该站点配置的“默认文档”列表。然后它在请求的路径中查找与配置的默认文档的名称匹配的物理文件。然后它返回磁盘上物理存在的第一个匹配的默认文档。

在此之后,如果请求的文件是 asp.net 文件,它将调用 asp.net 运行时并将处理移交给 asp.net。

您的 URL 重写发生在 asp.net 进程中。它不知道 IIS 关于默认文档等的设置。当您使用完全在 asp.net 中进行的 URL 重写等技术时,您不能使用默认文档等。所以总是使用页面名称重写。

于 2009-10-06T23:24:38.983 回答