我遇到了意想不到的行为:
以下声明可以正常使用:
Context.RewritePath( "~/Default.aspx" ); // redirect to default doc, explicitly
这给我一个404错误:
Context.RewritePath( "~/" ); // redirect to default doc, implicitly
从浏览器加载文档/
而不进行任何URL重写正确加载文档,因此我认为IIS已正确配置,并且/
和/Default.aspx
确实引用了同一文档
我宁愿使用后一种语句,因为随着时间的推移,IIS中可能会更改默认文档名称。我假设解决方案涉及从IIS检索默认文档名称的一些方法,但是我一直无法找到这样的方法。
所以我的问题是:在重写URL时指定默认文档的正确方法是什么?
答案 0 :(得分:4)
您的问题是IIS在将控制权转移到asp.net之前处理“默认文档”的路径转换。
当浏览器请求没有文件名的URL时,IIS将检查为该站点配置的“默认文档”列表。然后,它会在请求的路径中查找与配置的默认文档的名称匹配的物理文件。然后它返回磁盘上实际存在的第一个匹配的默认文档。
在此之后,如果请求的文件是asp.net文件,它将调用asp.net运行时并将处理切换到asp.net。
您的URL重写是在asp.net进程中进行的。它没有意识到IIS的默认文档等设置。当您使用完全在asp.net中进行的URL重写等技术时,您无法使用默认文档等。所以总是使用页面名称重写。