8

For my website I configured some custom error pages. If I generate a 404, the redirect works fine. When hitting a 400, the "bad request" text shows up instead of the configured URl.

As a test I copied the URL from 404 to 400. No change. Then I changed the redirect to a file. No change.

Any ideas?

Boris Callens
  • 90,659
  • 85
  • 207
  • 305
  • For any future readers of this discussion. You need to first determine what module of Windows/IIS gives you the 400 error page. Had it been http.sys (caused by factors such as oversize headers) or your web framework (caused by SOAP/REST errors), the way to customize that error page is closed or opened. Without this in mind, you wouldn't understand why some 400 can be customized and others not. – Lex Li Mar 06 '22 at 19:07

5 Answers5

7

I've run in to the same problem, and found this on msdn http://msdn.microsoft.com/en-us/library/ms690497.aspx

I'm not sure if this will work on IIS6, but it certainly works on IIS7. You need to configure httpErrors, not the custom errors

<system.webServer>
      <httpErrors errorMode="Custom">
            <error statusCode="400" subStatusCode="-1" path="_path" responseMode="Redirect" />
      </httpErrors>
</system.webServer>
Nikita Ignatov
  • 6,872
  • 2
  • 34
  • 34
6

Maybe this is your answer: this Microsoft site says re configuring custom errors in IIS6 that

The following errors are not customizable: 400, 403.9, 411, 414, 500, 500.11, 500.14, 500.15, 501, 503, and 505.

Tundra Fizz
  • 473
  • 3
  • 10
  • 25
DOK
  • 32,337
  • 7
  • 60
  • 92
  • 1
    Thanks for the answer. Although it's a good answer, it defenatly is not a sollution :( – Boris Callens Nov 06 '08 at 15:36
  • 1
    as of 03/07/2019 statusCode Required integer attribute. Specifies the number of the HTTP status code for which you want to create a custom error message. Acceptable values are from 400 through 999. https://learn.microsoft.com/en-us/previous-versions/iis/settings-schema/ms689487(v=vs.90) – Alexander Mihailov Nov 19 '20 at 15:50
3

Try

Response.TrySkipIisCustomErrors = true;

OR

<configuration>
  <system.webServer>
    <httpErrors existingResponse="PassThrough" />
  </system.webServer>
</configuration>

original post

Community
  • 1
  • 1
Roman O
  • 3,172
  • 30
  • 26
0

Check what's in your web.config file in the customErrors section. That has a defaultRedirect attribute, and an error subtag with a redirect attribute. These can conflict with your other configuration settings in IIS.

DOK
  • 32,337
  • 7
  • 60
  • 92
0

In 2020 it will work just like that web.config:

<system.webServer>
    <httpErrors errorMode="Custom" existingResponse="Replace">
      <remove statusCode="400" subStatusCode="-1" />
      ...
      <error statusCode="400" prefixLanguageFilePath="YOUR_PATH" path="YOUR_HTML_FILE" responseMode="File" />
    ...

statusCode

Required integer attribute.

Specifies the number of the HTTP status code for which you want to create a custom error message. Acceptable values are from 400 through 999.

https://learn.microsoft.com/en-us/previous-versions/iis/settings-schema/ms689487(v=vs.90)

Note that bad URL like https://stackoverflow.com/% still won't be customizable and one will get the simple Bad Request message coming from the IIS Kernel (Error Code 400).

More on that here https://serverfault.com/questions/257680/properly-handle-iis-request-with-percent-sign-in-url

Alexander Mihailov
  • 1,050
  • 1
  • 12
  • 19
  • There is usually nothing called "IIS Kernel". People commonly say http.sys or Windows HTTP API/service. – Lex Li Mar 06 '22 at 19:09