我最近将一个web应用程序从.Net 3.5迁移到.Net 4,并在IIS 7.5中将应用程序池更改为集成模式。这个应用程序有两个部分:第一部分对公众开放,第二部分仅通过登录。我使用表单身份验证进行登录,这是在根web.config中这样配置的:
<authentication mode="Forms">
<forms loginUrl="~/private/login.aspx" protection="All" timeout="20" name=".ASPXAUTH" path="/" requireSSL="false" slidingExpiration="true" defaultUrl="~/private/default.aspx" cookieless="UseCookies" enableCrossAppRedirects="true" />
</authentication>
在根web.config中,我有拒绝未经身份验证的用户的默认授权,因此:
<authorization>
<deny users="?" />
</authorization>
但我在根web.config中配置了以下设置,以允许每个人都看到欢迎页面:
<location path="Default.aspx">
<system.web>
<authorization>
<allow users="?,*" />
</authorization>
</system.web>
多年来,这一直很有效,但现在,如果我不明确地将Default.aspx放在URL中,表单重定向模块会导致登录页面被提供。我已经验证了我的默认页面配置正确,并且在IIS7中启用了它们。我还尝试在web.config中指定它们。我已经验证了DefaultDocumentModule在DirectoryListing模块之前的顺序。
如果我删除元素,问题就会"消失",但效果是默认允许所有用户,这是完全不可取的。
我没主意了。建议?
感谢
I
看起来像是某种默认的文档问题。如果您在站点的IIS管理器中查看"默认文档"列表中的内容。是否有可能除Default.aspx之外的其他内容在列表中排名靠前?如果在你的根网站中发现了与此匹配的内容,它将尝试先去那里,然后重定向到登录。
是否在web.config中显式设置默认文档?如:
<defaultDocument enabled="true">
<files>
<clear />
<add value="Default.aspx" />
<add value="Default.htm" />
<add value="index.htm" />
<add value="index.html" />
<add value="iisstart.htm" />
</files>
</defaultDocument>
好吧,我让一位Microsoft卓越支持工程师为我深入研究了这个问题。我们一起坐在我的工作站上,研究了(a)环境和应用程序配置,以及(b)可能的解决方案。
他引用了MS的这篇"快速发布"文章,该文章建议我通过MMC从IIS中删除ExtensionLessURL处理程序。好吧,我们是一个庞大的组织,服务器在wazoo之外,我不能保证这一改变会一直得到尊重,所以我不想这么做。我们尝试使用web.config删除它们,但没有成功。
所以,我从另一个StackOverflow线程(由Dmitry.Alk发布)向他展示了这个解决方案,他说这是一个很好的解决方案。对于这种特殊情况,它非常有效。
Fast Publish文章引用了此修补程序。提供了一个更新,使某些IIS 7.0或IIS 7.5处理程序能够处理URL不以句点结尾的请求,我必须将其出售给我们的IT"部门"。
我不把我在这里写的东西称为"答案",但我想分享我学到的东西,以防其他人在这个话题上发生。