add args in redirect to a directory

This commit is contained in:
Igor Sysoev 2008-05-26 18:57:43 +00:00
parent 25a4442187
commit b3699723c6

View file

@ -48,7 +48,7 @@ static ngx_int_t
ngx_http_static_handler(ngx_http_request_t *r) ngx_http_static_handler(ngx_http_request_t *r)
{ {
u_char *last, *location; u_char *last, *location;
size_t root; size_t root, len;
ngx_str_t path; ngx_str_t path;
ngx_int_t rc; ngx_int_t rc;
ngx_uint_t level; ngx_uint_t level;
@ -150,26 +150,39 @@ ngx_http_static_handler(ngx_http_request_t *r)
return NGX_HTTP_INTERNAL_SERVER_ERROR; return NGX_HTTP_INTERNAL_SERVER_ERROR;
} }
if (!clcf->alias && clcf->root_lengths == NULL) { len = r->uri.len + 1;
if (!clcf->alias && clcf->root_lengths == NULL && r->args.len == 0) {
location = path.data + clcf->root.len; location = path.data + clcf->root.len;
*last = '/';
} else { } else {
location = ngx_palloc(r->pool, r->uri.len + 1); if (r->args.len) {
len += r->args.len + 1;
}
location = ngx_palloc(r->pool, len);
if (location == NULL) { if (location == NULL) {
return NGX_HTTP_INTERNAL_SERVER_ERROR; return NGX_HTTP_INTERNAL_SERVER_ERROR;
} }
last = ngx_copy(location, r->uri.data, r->uri.len); last = ngx_copy(location, r->uri.data, r->uri.len);
}
*last = '/'; *last = '/';
if (r->args.len) {
*++last = '?';
ngx_memcpy(++last, r->args.data, r->args.len);
}
}
/* /*
* we do not need to set the r->headers_out.location->hash and * we do not need to set the r->headers_out.location->hash and
* r->headers_out.location->key fields * r->headers_out.location->key fields
*/ */
r->headers_out.location->value.len = r->uri.len + 1; r->headers_out.location->value.len = len;
r->headers_out.location->value.data = location; r->headers_out.location->value.data = location;
return NGX_HTTP_MOVED_PERMANENTLY; return NGX_HTTP_MOVED_PERMANENTLY;