path: root/tests/core-404-handler.t
diff options
authorGlenn Strauss <>2016-03-01 00:57:48 -0500
committerGlenn Strauss <>2016-04-25 01:01:08 -0400
commitdbdab5dbc9b98df9c40f11e0fc6a6ce49bfea804 (patch)
tree453cf4eaadf12238d6aeef1c8fe48ceffbe47319 /tests/core-404-handler.t
parent87b172e70e7a501f61061a2a4b82434b2db24bc7 (diff)
[core] server.error-handler new directive for error pages (fixes #2702)
server.error-handler preserves HTTP status error code when error page is static, and allows dynamic handlers to change HTTP status code when error page is provided by dynamic handler. server.error-handler intercepts all HTTP status codes >= 400 except when the content is generated by a dynamic handler (cgi, ssi, fastcgi, scgi, proxy, lua). The request method is unconditionally changed to GET for the request to service the error handler, and the original request method is later restored (for logging purposes). request body from the original request, if present, is discarded. server.error-handler is somewhat similar to server.error-handler-404, but server.error-handler-404 is now deprecated, intercepts only 404 and 403 HTTP status codes, and returns 200 OK for static error pages, a source of confusion for some admins. On the other hand, the new server.error-handler, when set, will intercept all HTTP status error codes >= 400. server.error-handler takes precedence over server.error-handler-404 when both are set. NOTE: a major difference between server.error-handler and the now-deprecated server.error-handler-404 is that the values of the non-standard CGI environment variables REQUEST_URI and REDIRECT_URI have been swapped. Since REDIRECT_STATUS is the original HTTP status code, REDIRECT_URI is now the original request, and REQUEST_URI is the current request (e.g. the URI/URL to the error handler). The prior behavior -- which reversed REQUEST_URI and REDIRECT_URI values from those described above -- is preserved for server.error-handler-404. Additionally, REDIRECT_STATUS is now available to mod_magnet, which continues to have access to request.uri and request.orig_uri. See further discussion at and github: closes #36
Diffstat (limited to 'tests/core-404-handler.t')
1 files changed, 8 insertions, 1 deletions
diff --git a/tests/core-404-handler.t b/tests/core-404-handler.t
index 599ade20..a7259ae7 100755
--- a/tests/core-404-handler.t
+++ b/tests/core-404-handler.t
@@ -18,7 +18,7 @@ BEGIN {
use strict;
use IO::Socket;
-use Test::More tests => 8;
+use Test::More tests => 9;
use LightyTest;
my $tf = LightyTest->new();
@@ -59,6 +59,13 @@ $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404, 'HTTP-
ok($tf->handle_http($t) == 0, '404 handler => dynamic(404)');
$t->{REQUEST} = ( <<EOF
+GET /dynamic/redirect_status/ HTTP/1.0
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404, 'HTTP-Content' => "REDIRECT_STATUS\n" } ];
+ok($tf->handle_http($t) == 0, 'error handler => dynamic(REDIRECT_STATUS)');
+$t->{REQUEST} = ( <<EOF
GET /dynamic/nostatus/notfound HTTP/1.0