customErrors с redirectMode = ResponseRewrite не работают на общем хостинге

Я пытаюсь настроить пользовательские страницы ошибок для своего сайта (ASP.NET 4, интегрированный конвейер).

Все работает правильно на локальном компьютере, но пользовательские страницы ошибок для страниц .aspx не отображаются на общем хостинге (я вижу страницы ошибок по умолчанию).

Если я изменю redirectMode="ResponseRewrite" на redirectMode="ResponseRedirect", все будет работать правильно на локальной и общей машине.

error.aspx - это настоящий файл, который находится рядом с файлом web.config (в корне сайта). На сайте нет Global.asax файла.

На локальной машине работает IIS 7.5, я не использую маршрутизацию (по крайней мере, сознательно), а общий хостинг сообщает, что Server: Microsoft-IIS/7.5 X-AspNet-Version: 4.0.30319

Не могли бы вы рассказать мне, в чем может быть причина такого разного поведения и что мне делать, чтобы решить эту проблему.

Вот выдержка из моего web.config файла:

<system.webServer>
    <httpErrors errorMode="Custom">
        <remove statusCode="404" />
        <error statusCode="404" path="/error.aspx" responseMode="ExecuteURL" />      
    </httpErrors>
</system.webServer>
<system.web>
    <customErrors mode="On" defaultRedirect="error.aspx" redirectMode="ResponseRewrite">
        <error statusCode="404" redirect="~/error.aspx"/>
    </customErrors>
    <httpRuntime requestValidationMode="2.0" />
</system.web>

person Bobrovsky    schedule 14.10.2011    source источник
comment
Что у вас локально? IIS 7 или 7,5? Когда дело касается пользовательских ошибок, есть несколько отличий. Кроме того, вы используете маршрутизацию?   -  person ScottE    schedule 14.10.2011
comment
@ScottE локально Я использую IIS 7.5 и не использую маршрутизацию (по крайней мере, сознательно)   -  person Bobrovsky    schedule 14.10.2011
comment
Кроме того, убедитесь, что пул приложений не работает в классическом режиме по сравнению с конвейером, иначе раздел system.webServer не будет затронут.   -  person ScottE    schedule 14.10.2011


Ответы (2)


После долгого обсуждения с хостинг-провайдером выяснилось, что:

  • мой подход в порядке
  • но это не сработает должным образом, потому что хостинг-провайдер отключил такую ​​возможность через machine.config.

Так что никогда не стоит недооценивать количество ошибок провайдера.

person Bobrovsky    schedule 15.10.2011

В моем web.config есть следующий комментарий:

для IIS 7.5 используйте errorMode = "Custom"; используйте responseMode = "ExecuteURL" при использовании маршрутизации, в противном случае используйте responseMode = "Redirect"

Только не просите меня объяснять, потому что я не знаю! Просто разобрал методом проб и ошибок.

person ScottE    schedule 14.10.2011
comment
httpErrors часть работает правильно на обеих машинах. несуществующие страницы, такие как site.com/1, обрабатываются должным образом. это customErrors часть, которая вызывает неожиданное поведение на общем хостинге (такие страницы, как site.com/1.aspx, не обрабатываются должным образом) - person Bobrovsky; 14.10.2011
comment
/ 1 на самом деле не является ресурсом .net, поэтому я думаю, вам придется использовать: ‹модулей runAllManagedModulesForAllRequests = true› ‹/modules› - person ScottE; 14.10.2011