The COPY and MOVE handler temporarily replaces r->uri with the
destination to map it to a path, restoring it only on success. When
ngx_http_map_uri_to_path() failed for the destination, the handler
returned without restoring r->uri, leaving it set to the client-supplied
destination. Later processing that derives a target from the request
URI, such as an error_page with a variable, then resolved against the
destination instead of the request target.
r->uri = duri;
if (ngx_http_map_uri_to_path(r, ©.path, &root, 0) == NULL) {
+ r->uri = uri;
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}