Подтвердить что ты не робот

Web.config не пересылает страницу с ошибкой 404 на страницах не .aspx

Цель

Я хочу, чтобы все URL-адреса пропущенных страниц пересылались на мою страницу 404, которая находится в моем корневом каталоге как 404error.aspx

Проблема

Пока будут работать только URL-адреса с .aspx. Например, если вы введете 4error.aspx, вы будете перенаправлены на страницу с ошибкой.

/404error.aspx?aspxerrorpath=/4error.aspx

Фон

Я не .NET-разработчик, поэтому я просто взял на себя этот проект, который использует классический .aspx. Поэтому я не использую продукт Microsoft для создания каких-либо из них в шаблонах или фреймворках. Я просто кодирую текст Sublime.

Что я уже исследовал

Я рассматриваю многие статьи, которые я нашел в Google, но ничего не было в полном объеме, что действительно сработало.

код

Это весь код, который я начал с моего web.config

web.config

<configuration>
  <system.web>
    <customErrors mode="RemoteOnly" defaultRedirect="~/404error.aspx" />
      <globalization
        fileEncoding="utf-8"
        requestEncoding="utf-8"
        responseEncoding="utf-8"
        culture="en-US"
        uiCulture="de-DE"
      />
  </system.web>
</configuration>

Я также нашел этот пример от Microsoft (404error.aspx была моей модификацией)
http://msdn.microsoft.com/en-us/library/vstudio/bb397417%28v=vs.100%29.aspx

web.config(2)

<configuration>
  <appSettings/>
  <connectionStrings/>
  <system.web>
    <compilation debug="true" />

    <!-- Turn on Custom Errors -->
    <customErrors mode="On" 
      defaultRedirect="/404error.aspx">
      <error statusCode="404" redirect="/404Error.aspx"/>
    </customErrors>

  </system.web>
</configuration>

Это также не обрабатывало страницы, на которых не было .aspx

Затем я попробовал этот пример из

web.config(3)

<?xml version="1.0"?>
<configuration>
   <system.web>
    <customErrors mode="RemoteOnly" defaultRedirect="~/404error.aspx" />
    <error statusCode="404" redirect="~/404error.aspx" />
    <globalization
      fileEncoding="utf-8"
      requestEncoding="utf-8"
      responseEncoding="utf-8"
      culture="en-US"
      uiCulture="de-DE"
    />
   </system.web>
   <system.webServer>
      <httpErrors>
        <remove statusCode="401" subStatusCode="-1" />
        <remove statusCode="403" subStatusCode="-1" />      
        <remove statusCode="404" subStatusCode="-1" />                
        <remove statusCode="500" subStatusCode="-1" />
          <!-- full url when responsemode is Redirect -->
        <error statusCode="401" path="http://foo.com/default.htm" responseMode="Redirect" />
          <!-- local relative path when responsemode is ExecuteURL -->
        <error statusCode="403" path="~/404error.aspx" responseMode="ExecuteURL" />
        <error statusCode="404" path="~/404error.aspx" responseMode="ExecuteURL" />                
        <error statusCode="500" path="~/404error.aspx" responseMode="ExecuteURL" />
      </httpErrors>
      <modules runAllManagedModulesForAllRequests="true"/>
   </system.webServer>
</configuration>

Очевидно, мне нужно изменить пути для других, чем 404 страниц, но я просто хотел проверить его на наличие этих ошибок. Последнее web.config работает еще хуже.

Не могли бы вы рассказать мне, что мне нужно изменить. Я был бы признателен за полный <configuration>, потому что я все время путаю то, что происходит.

РЕДАКТИРОВАТЬ 1

Я читал, что многие разработчики предлагали просто создать HTML-страницу. Итак, теперь моя страница 404.html Вот мой обновленный web.config

<configuration>
  <system.web>
    <customErrors mode="On"
              redirectMode="ResponseRewrite">
        <error statusCode="404"
           redirect="~/404.html"/>
      </customErrors>
      <globalization
        fileEncoding="utf-8"
        requestEncoding="utf-8"
        responseEncoding="utf-8"
        culture="en-US"
        uiCulture="de-DE"
      />
  </system.web>

  <system.webServer>
    <httpErrors errorMode="Custom"
            defaultResponseMode="File">
      <remove statusCode="404"/>
      <error statusCode="404"
          path="~/404.html"/>
    </httpErrors>
  </system.webServer>
</configuration>
4b9b3361

Ответ 1

Вам нужно настроить элемент <httpErrors>. Это настраивает страницы ошибок как для статических файлов, так и для серверных страниц.

Ваша третья попытка "web.config(3)" и "Edit 1" находится почти там. Проблема заключается в том, что вы не можете использовать здесь относительные пути (ex: "~/404.html" ), они должны быть относительными от корня сайта (например: "/404.html" ).

<?xml version="1.0"?>
<configuration>
   <system.webServer>
      <httpErrors>
        <remove statusCode="401" subStatusCode="-1" />
        <remove statusCode="403" subStatusCode="-1" />      
        <remove statusCode="404" subStatusCode="-1" />                
        <remove statusCode="500" subStatusCode="-1" />
          <!-- full url when responsemode is Redirect -->
        <error statusCode="401" path="http://foo.com/default.htm" responseMode="Redirect" />
          <!-- local relative path when responsemode is ExecuteURL -->
        <error statusCode="403" path="/404error.aspx" responseMode="ExecuteURL" />
        <error statusCode="404" path="/404error.aspx" responseMode="ExecuteURL" />                
        <error statusCode="500" path="/404error.aspx" responseMode="ExecuteURL" />
      </httpErrors>
   </system.webServer>
</configuration>

Ответ 2

Настройки в разделе customErrors примера приводят к тому, что любые необработанные ошибки HTTP 404 (файлы не найдены) будут перенаправлены в файл Http404ErrorPage.aspx. Эти ошибки HTTP 404 будут возникать, если запрос был сделан для файла .aspx, файла .asmx и т.д., И если запрошенный файл не существует. Все другие необработанные ошибки в файлах ASP.NET направляются в файл DefaultRedirectErrorPage.aspx.

<configuration>
  <appSettings/>
  <connectionStrings/>
  <system.web>
    <compilation debug="true" />

    <!-- Turn on Custom Errors -->
    <customErrors mode="On" 
      defaultRedirect="DefaultRedirectErrorPage.aspx">
      <error statusCode="404" redirect="Http404ErrorPage.aspx"/>
    </customErrors>

  </system.web>
</configuration>

NoteNote: В этом примере атрибут mode установлен в "On", чтобы вы могли отправлять сообщения об ошибках при запуске примера в Visual Studio. В производственной среде эта настройка обычно будет "RemoteOnly". Затем ASP.NET отображает страницы ошибок для внешних пользователей. Если запрос выполняется на компьютере сервера (localhost), ASP.NET отображает страницу с подробной информацией об ошибках.