Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: error_page with query_string
On Tue, Apr 22, 2008 at 10:46:53PM +0300, Andrew Sitnikov wrote:
> Hello nginx-ru,
>
> fastcgi_intercept_errors on;
>
> error_page 404 /index.php?autocom=errordoc&CODE=404
>
> первый запрос возвращяет 404, второй запрос на уходит на backend,
> и опять получается 404. мне кажется что $fastcgi_script_name получается
> равным '/index.php?autocom=errordoc&CODE=404'
> потому что если руками вбить линк этот то показывается нужная страница.
>
> версия nginx/0.5.35
Прилагаемый патч должен исправить.
--
Игорь Сысоев
http://sysoev.ru
Index: src/http/ngx_http_core_module.c
===================================================================
--- src/http/ngx_http_core_module.c (revision 1295)
+++ src/http/ngx_http_core_module.c (working copy)
@@ -3471,6 +3471,7 @@
{
ngx_http_core_loc_conf_t *lcf = conf;
+ u_char *args;
ngx_int_t overwrite;
ngx_str_t *value, uri;
ngx_uint_t i, n, nvar;
@@ -3539,6 +3540,8 @@
}
}
+ args = (u_char *) ngx_strchr(uri.data, '?');
+
for (i = 1; i < cf->args->nelts - n; i++) {
err = ngx_array_push(lcf->error_pages);
if (err == NULL) {
@@ -3577,7 +3580,19 @@
}
}
- err->uri = uri;
+ if (args) {
+ err->uri.len = args - uri.data;
+ err->uri.data = uri.data;
+ args++;
+ err->args.len = (uri.data + uri.len) - args;
+ err->args.data = args;
+
+ } else {
+ err->uri = uri;
+ err->args.len = 0;
+ err->args.data = NULL;
+ }
+
err->uri_lengths = uri_lengths;
err->uri_values = uri_values;
}
Index: src/http/ngx_http_special_response.c
===================================================================
--- src/http/ngx_http_special_response.c (revision 1295)
+++ src/http/ngx_http_special_response.c (working copy)
@@ -441,8 +441,6 @@
r->zero_in_uri = 0;
- args = NULL;
-
if (err_page->uri_lengths) {
if (ngx_http_script_run(r, &u, err_page->uri_lengths->elts, 0,
err_page->uri_values->elts)
@@ -453,6 +451,7 @@
p = u.data;
uri = &u;
+ args = NULL;
if (*p == '/') {
@@ -488,6 +487,7 @@
} else {
uri = &err_page->uri;
+ args = &err_page->args;
}
if (uri->data[0] == '/') {
Index: src/http/ngx_http_core_module.h
===================================================================
--- src/http/ngx_http_core_module.h (revision 1295)
+++ src/http/ngx_http_core_module.h (working copy)
@@ -225,6 +225,7 @@
ngx_int_t status;
ngx_int_t overwrite;
ngx_str_t uri;
+ ngx_str_t args;
ngx_array_t *uri_lengths;
ngx_array_t *uri_values;
} ngx_http_err_page_t;
|