Ошибки клиентов с redirectMode = «ResponseRewrite» не работают на общем хостинге

#asp.net #iis #iis-7 #iis-7.5 #shared-hosting

#asp.net #iis #iis-7 #iis-7.5 #общий хостинг

Вопрос:

Я пытаюсь настроить пользовательские страницы ошибок для своего сайта (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>
  

Комментарии:

1. Что вы запускаете локально? IIS 7 или 7.5? Есть несколько отличий, когда речь идет о пользовательских ошибках. Кроме того, используете ли вы маршрутизацию?

2. @ScottE локально я использую IIS 7.5 и не использую маршрутизацию (по крайней мере, сознательно)

3. Кроме того, убедитесь, что пул приложений не работает в классическом режиме против конвейера, иначе раздел system.webServer не попадет.

Ответ №1:

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

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

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

Ответ №2:

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

для IIS 7.5 используйте ErrorMode=»Пользовательский»; используйте responseMode=»ExecuteURL» при использовании маршрутизации, в противном случае используйте responseMode =»Перенаправление»

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

Комментарии:

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

2. /1 на самом деле не является ресурсом .net, поэтому я думаю, вам придется использовать: <модули runAllManagedModulesForAllRequests=»true»></modules>