如果有以下web.config
:
<configuration>
<system.web>
<authentication mode="Forms">
<forms name="MembershipCookie"
loginUrl="Login.aspx"
protection="All"
timeout="525600"
slidingExpiration="true"
enableCrossAppRedirects="true"
path="/" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
</system.web>
<location path="Default.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
</configuration>
该应用程序是在Windows 2008R2 / IIS7.5上运行的ASP.NET 2.0应用程序。
如果网站的应用程序池配置为运行ASP.NET 2.0,我浏览到http://example.com
,那么Default.aspx
将按照您对上述规则的预期进行呈现。< / p>
但是,如果应用程序池设置为运行ASP.NET 4.0,我将被重定向到登录页面。如果我明确指定http://example.com/default.aspx
,那么一切都很好并且default.aspx
呈现。
我尝试重写/ -> /default.aspx
(使用IIS UrlRewriter 2.0)但结果仍然相同,我被踢到了登录页面。
我还尝试使用具有相同结果的ASP.NET 4.0应用程序(这是问题最初出现的地方)。我使用2.0应用程序尝试此操作的原因是为了查看行为是否发生了变化,并且{4.0}中/
的处理方式似乎不同。
总而言之,使用上面的配置可以观察到:
ASP.NET Version Url Behaviour ------------------------------------------------------------------------- 2.0 http://example.com Renders Default.aspx 2.0 http://example.com/Default.aspx Renders Default.aspx 4.0 http://example.com Redirects to Login.aspx 4.0 http://example.com/Default.aspx Renders Default.aspx
这是一个错误/突破性变化还是我错过了一些明显的东西?
更新
我已经深究这个问题,请参阅下面的答案。
答案 0 :(得分:4)
找到了罪魁祸首。作为我们的WebDeploy 2.0 / WebMatrix服务器端更改的一部分,WebMatrix Server Validator建议使用此修补程序:
安装此Hot Fix会导致ASP.NET 4.0更改表单身份验证行为,其中只请求URL的域名部分。
更新1:
此QFE也是Windows 2008R2 SP1的一部分,也将以上述方式破坏ASP.NET 4.0的表单身份验证。
更新2:
此外,在配置为以ASP.NET和&amp; a运行的应用程序池中运行经典ASP应用程序时,这也会破坏默认文档处理。经典管道模式。
服务器返回404.2 - Not Found
错误。
同样的重大更改适用于Windows 2008R2 SP1。
更新3:
我向MS PSS报告了此事,他们证实了行为发生了重大变化。他们创建了这篇知识库文章,以回应我们(可能是其他人)受到影响的文章:
在我自己的情况下,如果受此问题的影响,我基本上会删除(或建议客户)无扩展的处理程序:
<configuration>
<system.webServer>
<handlers>
<remove name="ExtensionlessUrl-Integrated-4.0" />
<remove name="ExtensionlessUrl-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrl-ISAPI-4.0_32bit" />
</handlers>
</system.webServer>
</configuration>