46

Is there something like a wildcard directive to catch all possible errors and deal with them in a single custom error page?

ErrorDocument 404 /error.php?code=404
ErrorDocument 403 /error.php?code=403
...
ErrorDocument NNN /error.php?code=NNN #possible use of RegExp?

I know I probably won't be dealing with a lot of custom error pages here, but I'm curious about this.

mkvlrn
  • 758
  • 1
  • 8
  • 20

5 Answers5

32

That is not possible. You need to have a ErrorDocument directive for each status code you want to handle differently than with the default error handler.

Gumbo
  • 643,351
  • 109
  • 780
  • 844
  • Alright, kind of figured - I tried using some of the "tricks" usable on RewriteRule directives, but they only gave 500 errors. Thanks for clarifying. – mkvlrn Apr 10 '10 at 11:17
  • I guess this hasn't changed over the last years?! Also no "ErrorDocument 5** "-Option or similar?! – LuckyLuke Skywalker Feb 13 '22 at 15:32
8

For full reference... As far as i could get...

First - .htaccess formatted

Second - Descriptions.

All these i found here -> httpstatuses.com

These are All codes - Not just Errors .. Some will break your site. .

Use like:

ErrorDocument 100 https://EXAMPLE.com

This is the exact copy Paste.. It is not mine, however i reformatted the list.


( Hover for description, Click for detail. )

1×× : Informational

• 100 : Continue
• 101 : Switching Protocols
• 102 : Processing


2×× : Success

• 200 : OK
• 201 : Created
• 202 : Accepted
• 203 : Non-Authoritative Information
• 204 : OK (No Content)
• 205 : Reset Content
• 206 : Partial Content
• 207 : Multi-Status
• 208 : Already Reported
• 226 : IM Used


3×× : Redirection

• 300 : Multiple Choices
• 301 : Moved Permanently
• 302 : Found
• 303 : See Other
• 304 : Not Modified
• 305 : Use Proxy
• 307 : Temporary Redirect
• 308 : Permanent Redirect


4×× : Client Error

• 400 : Bad Request
• 401 : Unauthorized
• 402 : Payment Required
• 403 : Forbidden
• 404 : Not Found
• 405 : Method Not Allowed
• 406 : Not Acceptable
• 407 : Proxy Authentication Required
• 408 : Request Timeout
• 409 : Conflict
• 410 : Gone
• 411 : Length Required
• 412 : Precondition Failed
• 413 : Request Entity Too Large
• 414 : Request-URI Too Long
• 415 : Unsupported Media Type
• 416 : Requested Range Not Satisfiable
• 417 : Expectation Failed
• 418 : I'm a teapot
• 422 : Unprocessable Entity
• 423 : Locked
• 424 : Method Failure
• 426 : Upgrade Required
• 428 : Precondition Required
• 429.") : Too Many Requests
• 431 : Request Header Fields Too Large
• 444 : No Response
• 451 : Unavailable For Legal Reasons
• 499 : Client Closed Request


5×× : Server Error

• 500 : Internal Server Error
• 501 : Not Implemented
• 502 : Bad Gateway
• 503 : Service Unavailable
• 504 : Gateway Timeout
• 505 : HTTP Version Not Supported
• 506 : Variant Also Negotiates
• 507 : Insufficient Storage
• 508 : Loop Detected
• 510 : Not Extended
• 511 : Network Authentication Required
• 599 : Network connect timeout error

(Source)

ashleedawg
  • 20,365
  • 9
  • 72
  • 105
Empire of E
  • 588
  • 6
  • 12
5

Thanks @gadget-guru you inspired me to build a script to test all errors and built this .htaccess file to catch all errors at once.

ErrorDocument 400 /
ErrorDocument 401 /
ErrorDocument 402 /
ErrorDocument 403 /
ErrorDocument 404 /
ErrorDocument 405 /
ErrorDocument 406 /
ErrorDocument 407 /
ErrorDocument 408 /
ErrorDocument 409 /
ErrorDocument 410 /
ErrorDocument 411 /
ErrorDocument 412 /
ErrorDocument 413 /
ErrorDocument 414 /
ErrorDocument 415 /
ErrorDocument 416 /
ErrorDocument 417 /
ErrorDocument 422 /
ErrorDocument 423 /
ErrorDocument 424 /
ErrorDocument 426 /
ErrorDocument 428 /
ErrorDocument 429 /
ErrorDocument 431 /
ErrorDocument 451 /
ErrorDocument 500 /
ErrorDocument 501 /
ErrorDocument 502 /
ErrorDocument 503 /
ErrorDocument 504 /
ErrorDocument 505 /
ErrorDocument 506 /
ErrorDocument 507 /
ErrorDocument 508 /
ErrorDocument 510 /
ErrorDocument 511 /

this will redirect the user to the main page, but you can choose any page of course. Example:

ErrorDocument 511 /error.html

note that any other error code will break the server causing HTTP 500

AK_
  • 1,879
  • 4
  • 21
  • 30
4

Rather than passing in the error status code, you can pick it up in your script via the REDIRECT_STATUS environment variable (set by Apache). See: http://httpd.apache.org/docs/2.0/custom-error.html

Zhami
  • 19,033
  • 14
  • 48
  • 47
2

I don't found a way to handle all ErrorDocument's with one line. But you dont have to write out all the redirects. You can pass the ErrorCode in PHP with:

$response_code = http_response_code()

My .htaccess looks like

ErrorDocument 401 /error.php
ErrorDocument 402 /error.php
ErrorDocument 403 /error.php
ErrorDocument 404 /error.php
ErrorDocument 500 /error.php
R0b1ns
  • 39
  • 4