# HG changeset patch # User Igor Sysoev # Date 1232539882 0 # Node ID 43dcf8cc2cb1e92624ed63ac97ddf58089f08e6c # Parent 1aff348d9aa85a6d6733499fa4a046c9b8e6a5f8 allow directories in try_files diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c --- a/src/http/ngx_http_core_module.c +++ b/src/http/ngx_http_core_module.c @@ -1038,6 +1038,7 @@ ngx_http_core_try_files_phase(ngx_http_r ssize_t reserve, allocated; u_char *p, *name; ngx_str_t path; + ngx_uint_t test_dir; ngx_http_try_file_t *tf; ngx_open_file_info_t of; ngx_http_script_code_pt code; @@ -1133,6 +1134,8 @@ ngx_http_core_try_files_phase(ngx_http_r } } + test_dir = tf->test_dir; + tf++; ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, @@ -1172,7 +1175,7 @@ ngx_http_core_try_files_phase(ngx_http_r continue; } - if (!of.is_file) { + if (of.is_dir && !test_dir) { continue; } @@ -3853,6 +3856,11 @@ ngx_http_core_try_files(ngx_conf_t *cf, tf[i].name = value[i + 1]; + if (tf[i].name.data[tf[i].name.len - 1] == '/') { + tf[i].test_dir = 1; + tf[i].name.len--; + } + n = ngx_http_script_variables_count(&tf[i].name); if (n) { diff --git a/src/http/ngx_http_core_module.h b/src/http/ngx_http_core_module.h --- a/src/http/ngx_http_core_module.h +++ b/src/http/ngx_http_core_module.h @@ -245,6 +245,7 @@ typedef struct { ngx_array_t *lengths; ngx_array_t *values; ngx_str_t name; + ngx_uint_t test_dir; /* unsigned test_dir:1; */ } ngx_http_try_file_t;