Redirecting to custom error pages in Azure Application service doesn't work - azure-web-app-service

I'm trying to redirect in case of an http error to a error page hosted in an external url making use of the element <httpErrors> in my web.config file in server.
Currently I have the following configuration
<configuration>
<system.webServer>
<httpErrors errorMode="Custom" defaultResponseMode="Redirect">
<error statusCode="404" path="https://my-custom-error-page.com" />
</httpErrors>
...
and whatever I set as defaultResponseMode I cannot get the error page, and instead I'm still retrieving always the IIS error page.
someone knows what's missing?
IIS version 8.5
https://learn.microsoft.com/en-us/iis/configuration/system.webserver/httperrors/

Redirecting to custom error pages in Azure Application service doesn't work
Make sure your web.config is deployed in the wwwroot directory
Iam able to redirect to CustomError page with the below setting in web.config when an error occurs
<httpErrors existingResponse="PassThrough" />
<httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" path="/public/404.html" responseMode="ExecuteURL" />
</httpErrors>
Under <system.webServer> , Make sure you add
<httpErrors existingResponse="PassThrough" />
Check the path correctly
Under wwwroot folder created one folder named public and added the error.html page. Give the same path /public/404.html in web.config
Tried to access the page which does not exists, it redirected to the error page

Related

Why would HttpErrors in web.config working differently in Azure to on-premise for URLs containing "%25f2"?

I have a react website hosted as an Azure app service. In the website I have a web.config file that includes httpErrors for providing custom error pages.
<httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" path="/Error.html" responseMode="ExecuteURL" />
</httpErrors>
This mostly works as expected in Azure, if I navigate to a path that doesn't exist I get the custom error page. However, when I try to navigate to a path that contains "%25f2" like "/..%25f2.../a" then it doesn't show the custom error page and instead shows the standard Azure 404 error page.
To test this I setup a local website on my computer in IIS and used the same web.config configuration. When I try "/..%25f2.../a" on the local IIS site it does redirect to the custom error page.
Why do these have different behavior and how do I make Azure redirect to the custom error page for this type of URL?
After testing, it works for me.
<httpErrors existingResponse="Replace" defaultResponseMode="ExecuteURL" errorMode="Custom" >
<remove statusCode="404" />
<error statusCode="404" path="/Home/Error" responseMode="ExecuteURL"/>
<remove statusCode="500" />
<error statusCode="500" path="/Home/Error" responseMode="ExecuteURL"/>
</httpErrors>

IIS: set response code in web.config

I have a tiny website that serves as my maintenance placeholder page.
It has one html document that gets served as an error page for 404s and 403s which will, since there's nothing else there, be always served.
But really, I wish the response code was rather something like 503. How can I do that purely in web.config without resorting to ASP.NET?
Try this:
<configuration>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="File" >
<remove statusCode="500" />
<error statusCode="500"
prefixLanguageFilePath="C:\Contoso\Content\errors"
path="500.htm" />
</httpErrors>
</system.webServer>
</configuration>
See this link for more info:

asp.net invalid path ending in slash does not return to error page IIS

Is there a specific setting in IIS to get the error page handling to work right if you enter a url that ends with "/"? On my local machine, if I navigate to
http://localhost:20640/herbitty/blerb.aspx
OR
http://localhost:20640/herbitty/
http://localhost:20640/herbitty/?somehorriblequerystring=oops
These pages redirect to Default.aspx as they should. But after i've deployed to the server, only the pages ending with .aspx work properly. The pages ending with a slash end or a random static content (http://my.dev-server.org/ls/ls.html) up on a completely white page, with no html or anything.
Here is my web.config:
<?xml version="1.0"?>
<configuration>
<system.web>
<customErrors mode="On" defaultRedirect="/Default.aspx" />
</system.web>
<system.webServer>
<httpErrors errorMode="Custom">
<remove statusCode="404" subStatusCode='-1' />
<remove statusCode="503" subStatusCode='-1' />
<!-- this catches everything that is not Default.aspx-->
<error statusCode="404" path="/Default.aspx" prefixLanguageFilePath="" responseMode="ExecuteURL" />
<!-- 503 needs to redirect because this is set manually on the Default.aspx page-->
<error statusCode="503" path="/Default.aspx" prefixLanguageFilePath="" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
</configuration>
My server did not have the following roles added to it:
Web Server -> Common HTTP Features -> HTTP Errors
Web Server -> Common HTTP Features -> HTTP Redirection
Now I get a proper 404 error page, so i can now catch it.

Classic ASP IIS7 Custom 404 Handler

At witts end with this problem.
I am working on a busy site which we have migrated from IIS6 to IIS7, which uses a custom 404.asp handler to process SEO friendly URLS and return the correct content from included asp scripts.
We have managed to get the 404 method to work on IIS7, but if there is a error in the code somewhere, we have set iis to run 500.asp which is designed to log the error and returns a useful message to the user.
So the flow should be :
User types Friendly URL : e.g. http://www.sitename.com/testarticle/
Which does not exist and fires 404.asp
404 looks up "testarticle" in our database and returns the correct content.
That all works..
If error Should call 500.asp
- Logs Error in our Log (Works)
- Returns Msg to the screen (Not working - Just Get Blank Page)
This worked in IIS6, however in IIS7 the 500.asp logs the error in our log, but absolutely nothing is written out to the screen - We just get a blank screen. Very Frustrating.
We have tried changing what feels like every setting in IIS, and web.config but we can't get this to work.
Any help much appreciated..
Cheers
I did a similar migration a little while ago and this is the web.config settings I ended up with (well just the relevant parts):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" subStatusCode="-1" prefixLanguageFilePath="" path="/common/404.asp" responseMode="ExecuteURL" />
<remove statusCode="500" subStatusCode="100" />
<error statusCode="500" subStatusCode="100" prefixLanguageFilePath="" path="/common/500.asp" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
</configuration>
Note the web.config section used. When done using the customErrors element it did not work for me. This was the only way I could get both URL rewriting using a custom 404 error page and custom 500 errors working in Classic ASP. Hopefully that helps you.
So you get a blank page?
I had a similar problem, the solution is really weird but works for sure.
I'll be very pragmatic, do the following.
<httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL" existingResponse="Auto">
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="500" subStatusCode="100" prefixLanguageFilePath="" path="/500.100.asp" responseMode="ExecuteURL" />
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/404.asp" responseMode="ExecuteURL" />
</httpErrors>
The blank page will be "not blank" if you assure that it ends with:
Response.Flush()
When IIS executes the code inside /500.100.asp it doesn't flush the response and it ends with a blank page.
I assure that "404" and "500.100" custom errors can be possible in IIS7.5/IIS8 and Classic ASP ;)

500.19 error in IIS7 when an error occurs

Setup: Windows 7, IIS7. I am working on an app that is being viewed through the local IIS server, not the built in debugging web server. So my app url is http://localhost/foo/bar.aspx. There is no <customErrors> section in my web.config, and I haven't changed any settings in IIS.
If any error occurs, I always get the following error screen:
HTTP Error 500.19 - Internal Server Error
Absolute physical path "C:\inetpub\custerr" is not allowed in system.webServer/httpErrors section in web.config file. Use relative path instead.
Here's my applicationhost.config contents:
<httpErrors errorMode="Custom" lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">
<error statusCode="401" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="401.htm" />
<error statusCode="403" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="403.htm" />
<error statusCode="404" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="404.htm" />
<error statusCode="405" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="405.htm" />
<error statusCode="406" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="406.htm" />
<error statusCode="412" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="412.htm" />
<error statusCode="500" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="500.htm" />
<error statusCode="501" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="501.htm" />
<error statusCode="502" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="502.htm" />
</httpErrors>
How can I get rid of this configuration error so I can see detailed errors?
I've been dealing with this issue for the last few days and found the solution. A Web.Config file is likely specifying an absolute path for one of the error pages. This may not be the Web.Config of the application you are testing. For me, it was the website's Web.Config file.
If you find the offending Web.Config file you can remove the absolute path and the problem should be fixed.
A much easier solution would be to alter your ApplicationHost.Config file to set the allowAbsolutePathsWhenDelegated property to true:
<httpErrors allowAbsolutePathsWhenDelegated="true" errorMode="Custom"
lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">
I had the same problem when I installed Active Directory Certificate Services on the domain controller. Both of them were using port 443. I change the one for certificate services to the server IP Address and left the exchange server unassigned. That solved my problem.
I had this same issue in IIS 8.5. The fix was to delete any entries in the web.config file (located in the root directory of the website) that referenced the custom error pages. The entries were created by the system when I had attempted to make changes to custom pages.
What helped me to resolve this error is setting allowAbsolutePathsWhenDelegated to true.
Go to IIS > Configuration Editor > in Section type: system.webServer/httpErrors
and Set allowAbsolutePathsWhenDelegated to true. Reset IIS for good measure.
For me the solution was to set custom account
select application-->basic settings in the right pane--->connect as -->provide username and password then give this user full permissions on the project folder on inetpub>wwwroot>foldername

Resources