recently we moved an ASP.Net 3.5 website to 4.0 (integrated mode) and when we deployed to the clients server (Windows Server 2008 Web edition) we notice that some .aspx pages are serving 404 errors.
What is strange is that
1) the pages exist
2) if you browse from the server itself the page is served as normal, only external clients get the 404
3) it's the default 404 error page not the one configured in the web.config
4) it only happens for some .aspx pages, and I've not been able to establish a link between the pages that are not being served externally.
We are using a URL rewriter module which I first thought may be at fault but then realised that only some of the failing pages are being rewritten. I've also tested removing the http module and the problem still persists.
As everything is working as expected when logged onto the server I was thinking it my be some sort of permission issue, but why would it only affect a few pages?
I turned on failed request tracking and the debug files are being generated with the expected 404 error, although at the moment I'm not sure what most of the data means so can't decipher what's going on internally.
I'd really appreciate some help with this one.
UPDATE:
I changed the website to application pool to ASP.Net 4.0 Classic and I recieved the following error when browsing from the server itself.
HTTP Error 404.2 - Not Found The page you are requesting cannot be served because of the ISAPI and CGI Restriction list settings on the Web server.
PageHandlerFactory-ISAPI-4.0_64bit
Most likely causes:
No handler mapping for this request was found. A feature may have to be installed.
The Web service extension for the requested resource is not enabled on the server.
The mapping for the extension points to the incorrect location.
The extension was misspelled in the browser or the Web server. Things you can try:
Install the feature that handles this request. For example, if you get this error for an .ASPX page, you may have to install ASP.NET via IIS setup.
Verify that the Web service extension requested is enabled on the server.
Open the IIS Manager and navigate to the server level.
In the Features view, double-click ISAPI and CGI Restrictions to verify that the Web service extension is set to Allowed.
If the extension is not in the list, click Add in the Actions pane.
In the Add ISAPI and CGI Restrictions dialog box, type the path of the .dll or .exe file in the ISAPI or CGI Path box, or click Browse to navigate to the location of the file.
In the Description box, type a brief description of the restriction.
(Optional) Check "Allow extension path to execute" to allow the restriction to run automatically. If you do not check this option, the restriction status is Not Allowed, which is the default. You can allow the restriction later by selecting it and clicking Allow on the Actions pane.
Click OK. NOTE: Make sure that this Web service extension or CGI is needed for your Web server before adding it to the list.
Verify that the location of the extension is correct.
Verify that the URL for the extension is spelled correctly both in the browser and the Web server.
Create a tracing rule to track failed requests for this HTTP status code. For more information about creating a tracing rule for failed requests, click here.
Both 64 and 32 bit ASP.Net were set to not allowed - changing these to allowed seems to have fixed all pages except one set of pages that uses the URL Rewriting module, which I think although am not sure may be unrelated - still investigating.