From: Eric Covener Date: Mon, 13 Jan 2014 01:51:58 +0000 (+0000) Subject: don't search for directory indexes/directoryslashes if a URL is in the X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bb49fe5211f2c2572959e7289913009e72bfd02b;p=thirdparty%2Fapache%2Fhttpd.git don't search for directory indexes/directoryslashes if a URL is in the middle of being rewritten [in per-dir context]. PR53929 git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1557641 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index bd99d4295c3..686900cd285 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,9 @@ Changes with Apache 2.5.0 + *) mod_dir: Don't search for a DirectoryIndex or DirectorySlash on a URL + that was just rewritten by mod_rewrite. PR53929. [Eric Covener] + *) mod_dir: Add DirectoryCheckHandler to allow a 2.2-like behavior, skipping execution when a handler is already set. PR53929. [Eric Covener] diff --git a/include/ap_mmn.h b/include/ap_mmn.h index 0ba05f90fbc..ba4034e631f 100644 --- a/include/ap_mmn.h +++ b/include/ap_mmn.h @@ -445,6 +445,7 @@ * 20131112.1 (2.5.0-dev) Add suspend_connection and resume_connection hooks * 20131112.2 (2.5.0-dev) Add ap_regname * 20131230.0 (2.5.0-dev) cl_head_zero & expect_strict added to server_config + * 20131230.1 (2.5.0-dev) REDIRECT_HANDLER_NAME in mod_rewrite.h */ #define MODULE_MAGIC_COOKIE 0x41503235UL /* "AP25" */ @@ -452,7 +453,7 @@ #ifndef MODULE_MAGIC_NUMBER_MAJOR #define MODULE_MAGIC_NUMBER_MAJOR 20131230 #endif -#define MODULE_MAGIC_NUMBER_MINOR 0 /* 0...n */ +#define MODULE_MAGIC_NUMBER_MINOR 1 /* 0...n */ /** * Determine if the server's current MODULE_MAGIC_NUMBER is at least a diff --git a/modules/mappers/mod_dir.c b/modules/mappers/mod_dir.c index a309a983900..e0047ecf75f 100644 --- a/modules/mappers/mod_dir.c +++ b/modules/mappers/mod_dir.c @@ -29,6 +29,7 @@ #include "http_log.h" #include "http_main.h" #include "util_script.h" +#include "mod_rewrite.h" module AP_MODULE_DECLARE_DATA dir_module; @@ -277,6 +278,11 @@ static int fixup_dir(request_rec *r) return DECLINED; } + /* we're running between mod_rewrites fixup and its internal redirect handler, step aside */ + if (!strcmp(r->handler, REDIRECT_HANDLER_NAME)) { + return DECLINED; + } + if (d->index_names) { names_ptr = (char **)d->index_names->elts; num_names = d->index_names->nelts; diff --git a/modules/mappers/mod_rewrite.c b/modules/mappers/mod_rewrite.c index 1f1203edf9e..5e0d9183c9b 100644 --- a/modules/mappers/mod_rewrite.c +++ b/modules/mappers/mod_rewrite.c @@ -5027,7 +5027,7 @@ static int hook_fixup(request_rec *r) rewritelog((r, 1, dconf->directory, "internal redirect with %s " "[INTERNAL REDIRECT]", r->filename)); r->filename = apr_pstrcat(r->pool, "redirect:", r->filename, NULL); - r->handler = "redirect-handler"; + r->handler = REDIRECT_HANDLER_NAME; return OK; } } @@ -5073,7 +5073,7 @@ static int hook_mimetype(request_rec *r) */ static int handler_redirect(request_rec *r) { - if (strcmp(r->handler, "redirect-handler")) { + if (strcmp(r->handler, REDIRECT_HANDLER_NAME)) { return DECLINED; } diff --git a/modules/mappers/mod_rewrite.h b/modules/mappers/mod_rewrite.h index 040baeeac1a..25d2e9a23b7 100644 --- a/modules/mappers/mod_rewrite.h +++ b/modules/mappers/mod_rewrite.h @@ -29,6 +29,8 @@ #include "apr_optional.h" #include "httpd.h" +#define REDIRECT_HANDLER_NAME "redirect-handler" + /* rewrite map function prototype */ typedef char *(rewrite_mapfunc_t)(request_rec *r, char *key);