Single ErrorDocument directive to catch all errors (.htaccess)
Asked Answered
D

5

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.

Dittmer answered 10/4, 2010 at 0:27 Comment(0)
G
33

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.

Galling answered 10/4, 2010 at 7:28 Comment(2)
Alright, kind of figured - I tried using some of the "tricks" usable on RewriteRule directives, but they only gave 500 errors. Thanks for clarifying.Dittmer
I guess this hasn't changed over the last years?! Also no "ErrorDocument 5** "-Option or similar?!Lapsus
D
9

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)

Dworman answered 13/5, 2019 at 9:57 Comment(0)
N
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

Nattie answered 18/2, 2021 at 11:55 Comment(0)
E
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

Eyeshot answered 7/12, 2010 at 16:50 Comment(2)
This does not solve the problem of enumerating every error code in .htaccess, but useful to know nonethelessUnveiling
This is what I'm doing, and the question asks how to make this easier to handle in .htaccess.Cyclohexane
M
3

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
Medallion answered 18/8, 2018 at 10:43 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.