У меня есть 2 конфигурации в том же web.config
<system.web>
<customErrors mode="On" defaultRedirect="/error.aspx" redirectMode="ResponseRedirect">
</customErrors>
</system.web>
, которые вы также можете использовать customErrors mode = "RemoteOnly"
И
<system.webServer>
<httpErrors errorMode="Custom">
<remove statusCode="401" subStatusCode="-1" />
<remove statusCode="403" subStatusCode="-1" />
<remove statusCode="404" subStatusCode="-1" />
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="401" path="/401.aspx" responseMode="ExecuteURL" />
<error statusCode="403" path="/403.aspx" responseMode="ExecuteURL" />
<error statusCode="404" path="/404.aspx" responseMode="ExecuteURL" />
<error statusCode="500" path="/500.aspx" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
Взгляните на путь = "/ 404.aspx" отличается от пути = "~ / 404.aspx" или path = "404.aspx«