|
@@ -14826,13 +14826,19 @@ handle_request(struct mg_connection *conn)
|
|
|
&& (ri->local_uri[uri_len - 1] != '/')) {
|
|
|
|
|
|
size_t len = strlen(ri->request_uri);
|
|
|
- char *new_path = mg_malloc_ctx(len + 2, conn->phys_ctx);
|
|
|
+ size_t lenQS = ri->query_string ? strlen(ri->query_string) + 1 : 0;
|
|
|
+ char *new_path = mg_malloc_ctx(len + lenQS + 2, conn->phys_ctx);
|
|
|
if (!new_path) {
|
|
|
mg_send_http_error(conn, 500, "out or memory");
|
|
|
} else {
|
|
|
memcpy(new_path, ri->request_uri, len);
|
|
|
new_path[len] = '/';
|
|
|
new_path[len + 1] = 0;
|
|
|
+ if (ri->query_string) {
|
|
|
+ new_path[len + 1] = '?';
|
|
|
+ /* Copy query string including terminating zero */
|
|
|
+ memcpy(new_path + len + 2, ri->query_string, lenQS);
|
|
|
+ }
|
|
|
mg_send_http_redirect(conn, new_path, 301);
|
|
|
}
|
|
|
return;
|