summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/connections.c2
-rw-r--r--src/mod_cgi.c14
-rw-r--r--src/mod_fastcgi.c5
-rw-r--r--src/mod_scgi.c7
-rwxr-xr-xtests/docroot/www/404.pl5
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",