The problem happens when we navigate to a URL that does NOT contain a .NET extension – https://localhost/Test/vanityUrl. If the URL was to end in page *.aspx then the custom error handling would redirects to the customized 404 page as expected.
Now the question is how to make sure the customized 404 page being returned even for extension-less or non-dotnet extensions.
Server Environment: Windows Server 2008 R2 (64bit)
IIS Version: 7.5
Application Framework: .NET v2.0
Application Pool Mode: Integrated
As we know, this is not a problem in IIS6 or if we set the site running in Classic mode in IIS7.5. Previously in IIS 6 the handling of extension-less or non-dotnet extensions was handled by a wildcard ISAPI extension. Switch the site to run in Classic mode also results in the expected behavior. For detailed information, please reference the below article:
How to achieve the same target in IIS7.5 Integrated pipeline?
You might want to try “Error Pages” feature in IIS Manager but it doesn’t work as expected:
The same default “404” error would be returned:
After several rounds of test, I found that we can use the below way to Enable Wildcard Script Mapping in IIS7.5 Integrated Pipeline to Customize 404 Error page:
Add the below lines to the web.config of the related website in “Handler Mapping” section:
<add name="PageHandlerFactory-Integrated-wildcard2" path="*" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode" responseBufferLimit="4194304" />
The above line is actually copied from the below handler mapping directly and I just change the path from “*.aspx” to “*”:
<add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode" responseBufferLimit="4194304" />
Once the above handler being added in web.config manually, you can check it in “Handler Mappings” directly:
After I applied the above change, the extension less URL could be redirected to customized 404 aspx as expected:
NOTE: To make the above customized “404” error page being redirected, still you need to add the below lines in web.config of the related website:
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/ERROR/404.ASPX" responseMode="ExecuteURL" />
Yong Kang Chen from GBSD DSI Team