Here's how to properly configure custom error pages, including 404s and static file handling.
✅ 1. Enable Custom Errors in web.config
mode="On" defaultRedirect="~/ErrorPages/GeneralError.html">
statusCode="404" redirect="~/ErrorPages/404.html" />
statusCode="500" redirect="~/ErrorPages/500.html" />
📘 customErrors
mode
Options
Mode | Description |
---|---|
Off | Shows full error details, including stack trace. Use this only in development. |
On | Always shows the custom error page defined, even on the local machine. |
RemoteOnly | Shows detailed error to local requests, and custom page to remote users. Ideal for dev. |
🔐 Tip: In production, use On or RemoteOnly to hide sensitive error details.
🧱 2. Handle Static File Errors (IIS Level)
By default, IIS handles static file errors (e.g., missing .jpg) and bypasses ASP.NET. To handle those too:
Add this under system.webServer
:
errorMode="Custom" existingResponse="Replace">
statusCode="404" subStatusCode="-1" />
statusCode="404" path="/ErrorPages/404.html" responseMode="ExecuteURL" />
Explanation of httpErrors attributes:
errorMode="Custom"
: Enables your custom error pages.
existingResponse="Replace"
: Overwrites the existing IIS error with your own.
responseMode="ExecuteURL"
: Executes an ASP.NET page or serves a static file.
🎯 Example Folder Structure
/ErrorPages/
├── 404.html
├── 500.html
└── GeneralError.html
Make sure these files are included in your project and set to "Copy if newer".
Summary
Task | Configuration Section |
---|---|
ASP.NET runtime errors | in system.web |
Static file errors (e.g., 404) | in system.webServer |
Show detailed errors locally | mode="RemoteOnly" |
Catch-all fallback | mode="defaultRedirect" |
If you're using MVC, you can create a custom ErrorController to catch all unhandled errors programmatically.
If you found this helpful, consider supporting my work at ☕ Buy Me a Coffee.