Если есть следующее 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>
Приложение представляет собой приложение ASP.NET 2.0, работающее в Windows 2008R2 / IIS7.5.
Если пул приложений сайта настроен для работы ASP.NET 2.0, и я выбираю http://example.com
, тогда Default.aspx
отображается так, как вы ожидаете из приведенных выше правил.
Однако, если пул приложений настроен на запуск 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
Это ошибка / критическое изменение или я пропустил что-то явно очевидное?
Обновление:
Я дошел до сути этой проблемы, см. Мой собственный ответ ниже.