diff options
-rw-r--r-- | src/connections.c | 2 | ||||
-rw-r--r-- | src/mod_cgi.c | 14 | ||||
-rw-r--r-- | src/mod_fastcgi.c | 5 | ||||
-rw-r--r-- | src/mod_scgi.c | 7 | ||||
-rwxr-xr-x | tests/docroot/www/404.pl | 5 |
5 files changed, 12 insertions, 21 deletions
diff --git a/src/connections.c b/src/connections.c index 507838c0..670000ae 100644 --- a/src/connections.c +++ b/src/connections.c @@ -1110,13 +1110,11 @@ int connection_state_machine(server *srv, connection *con) { con->response.content_length = -1; con->response.transfer_encoding = 0; - array_set_key_value(con->environment, CONST_STR_LEN("REDIRECT_URI"), CONST_BUF_LEN(con->request.orig_uri)); con->error_handler_saved_status = con->http_status; con->error_handler_saved_method = con->request.http_method; con->request.http_method = HTTP_METHOD_GET; } else { /*(preserve behavior for server.error-handler-404)*/ - array_set_key_value(con->environment, CONST_STR_LEN("REDIRECT_URI"), CONST_BUF_LEN(error_handler)); con->error_handler_saved_status = -con->http_status; /*(negative to flag old behavior)*/ } diff --git a/src/mod_cgi.c b/src/mod_cgi.c index e6212fea..52e7f5de 100644 --- a/src/mod_cgi.c +++ b/src/mod_cgi.c @@ -528,13 +528,6 @@ static int cgi_demux_response(server *srv, handler_ctx *hctx) { return FDEVENT_HANDLED_FINISHED; } - if (!buffer_is_equal(con->request.uri, con->request.orig_uri) - && !array_get_element(con->environment, "REDIRECT_URI")) { - array_set_key_value(con->environment, - CONST_STR_LEN("REDIRECT_URI"), - CONST_BUF_LEN(con->request.orig_uri)); - } - buffer_copy_buffer(con->request.uri, ds->value); if (con->request.content_length) { @@ -1211,10 +1204,9 @@ static int cgi_create_env(server *srv, connection *con, plugin_data *p, handler_ } else { cgi_env_add(&env, CONST_STR_LEN("QUERY_STRING"), CONST_STR_LEN("")); } - if (con->error_handler_saved_status >= 0) { - cgi_env_add(&env, CONST_STR_LEN("REQUEST_URI"), CONST_BUF_LEN(con->request.uri)); - } else { - cgi_env_add(&env, CONST_STR_LEN("REQUEST_URI"), CONST_BUF_LEN(con->request.orig_uri)); + cgi_env_add(&env, CONST_STR_LEN("REQUEST_URI"), CONST_BUF_LEN(con->request.orig_uri)); + if (!buffer_is_equal(con->request.uri, con->request.orig_uri)) { + cgi_env_add(&env, CONST_STR_LEN("REDIRECT_URI"), CONST_BUF_LEN(con->request.uri)); } /* set REDIRECT_STATUS for php compiled with --force-redirect * (if REDIRECT_STATUS has not already been set by error handler) */ diff --git a/src/mod_fastcgi.c b/src/mod_fastcgi.c index 52d707d5..4b0f8bad 100644 --- a/src/mod_fastcgi.c +++ b/src/mod_fastcgi.c @@ -1965,7 +1965,7 @@ static int fcgi_create_env(server *srv, handler_ctx *hctx, int request_id) { fcgi_extension_host *host= hctx->host; connection *con = hctx->remote_conn; - buffer * const req_uri = (con->error_handler_saved_status >= 0) ? con->request.uri : con->request.orig_uri; + buffer * const req_uri = con->request.orig_uri; server_socket *srv_sock = con->srv_socket; sock_addr our_addr; @@ -2142,6 +2142,9 @@ static int fcgi_create_env(server *srv, handler_ctx *hctx, int request_id) { } else { FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REQUEST_URI"), CONST_BUF_LEN(req_uri)),con) } + if (!buffer_is_equal(con->request.uri, con->request.orig_uri)) { + FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REDIRECT_URI"), CONST_BUF_LEN(con->request.uri)),con); + } if (!buffer_string_is_empty(con->uri.query)) { FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("QUERY_STRING"), CONST_BUF_LEN(con->uri.query)),con) } else { diff --git a/src/mod_scgi.c b/src/mod_scgi.c index f3ec978b..3d05769c 100644 --- a/src/mod_scgi.c +++ b/src/mod_scgi.c @@ -1704,10 +1704,9 @@ static int scgi_create_env(server *srv, handler_ctx *hctx) { scgi_env_add(p->scgi_env, CONST_STR_LEN("SCRIPT_FILENAME"), CONST_BUF_LEN(p->path)); scgi_env_add(p->scgi_env, CONST_STR_LEN("DOCUMENT_ROOT"), CONST_BUF_LEN(con->physical.basedir)); } - if (con->error_handler_saved_status >= 0) { - scgi_env_add(p->scgi_env, CONST_STR_LEN("REQUEST_URI"), CONST_BUF_LEN(con->request.uri)); - } else { - scgi_env_add(p->scgi_env, CONST_STR_LEN("REQUEST_URI"), CONST_BUF_LEN(con->request.orig_uri)); + scgi_env_add(p->scgi_env, CONST_STR_LEN("REQUEST_URI"), CONST_BUF_LEN(con->request.orig_uri)); + if (!buffer_is_equal(con->request.uri, con->request.orig_uri)) { + scgi_env_add(p->scgi_env, CONST_STR_LEN("REDIRECT_URI"), CONST_BUF_LEN(con->request.uri)); } if (!buffer_string_is_empty(con->uri.query)) { scgi_env_add(p->scgi_env, CONST_STR_LEN("QUERY_STRING"), CONST_BUF_LEN(con->uri.query)); diff --git a/tests/docroot/www/404.pl b/tests/docroot/www/404.pl index d4eb2aee..5b5672cf 100755 --- a/tests/docroot/www/404.pl +++ b/tests/docroot/www/404.pl @@ -1,7 +1,6 @@ #!/usr/bin/env perl -my $request_uri = $ENV{'REQUEST_URI'}; # server.error-handler-404 -my $redirect_uri= $ENV{'REDIRECT_URI'}; # server.error-handler +my $request_uri = $ENV{'REQUEST_URI'}; if ($request_uri =~ m/^\/dynamic\/200\// ) { print "Status: 200\n", @@ -29,7 +28,7 @@ elsif ($request_uri =~ m/^\/send404\.pl/ ) { elsif ($request_uri =~ m/^\/dynamic\/nostatus\// ) { print ("found here\n"); } -elsif ($redirect_uri =~ m/^\/dynamic\/redirect_status\// ) { +elsif ($request_uri =~ m/^\/dynamic\/redirect_status\// ) { print "Status: $ENV{'REDIRECT_STATUS'}\n", "Content-Type: text/plain\n", "\n", |