Цель
Я хочу, чтобы все URL-адреса пропущенных страниц пересылались на мою страницу 404, которая находится в моем корневом каталоге как 404error.aspx
Проблема
Пока будут работать только URL-адреса с .aspx
. Например, если вы введете 4error.aspx
, вы будете перенаправлены на страницу с ошибкой.
/404error.aspx?aspxerrorpath=/4error.aspx
Фон
Я не .NET-разработчик, поэтому я просто взял на себя этот проект, который использует классический .aspx
. Поэтому я не использую продукт Microsoft для создания каких-либо из них в шаблонах или фреймворках. Я просто кодирую текст Sublime.
Что я уже исследовал
- 404 Перенаправление для страниц без aspx - ответы были неполными или не работают.
- 404 не добавляет aspxerrorpath для страниц без aspx - но это немного отличалось от того, что я хочу.
Я рассматриваю многие статьи, которые я нашел в 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>