Changes with Apache 2.3.0
[Remove entries to the current 2.0 and 2.2 section below, when backported]
+ *) mod_proxy_balancer: When finding best worker, use case insensitive
+ match for scheme and host, but case sensitive for the rest of
+ the path. [Jim Jagielski]
+
*) Asynchronous write completion for the Event MPM. [Brian Pane]
*) Added an End-Of-Request bucket type. The logging of a request and
int max_match = 0;
int url_length;
int worker_name_length;
+ int sh_length;
const char *c;
int i;
return NULL;
url_length = strlen(url);
+
+ /*
+ * We need to find the start of the path and
+ * therefore we know the length of the scheme://hostname/
+ * part.
+ */
+ c = ap_strchr_c(c+3, '/');
+ if (c)
+ sh_length = c - url;
+ else
+ sh_length = url_length;
+
worker = (proxy_worker *)conf->workers->elts;
/*
* fits best to the URL.
*/
for (i = 0; i < conf->workers->nelts; i++) {
- if ( ((worker_name_length = strlen(worker->name)) <= url_length)
+ int prefix;
+ int bypass;
+ worker_name_length = strlen(worker->name);
+ if (worker_name_length <= sh_length) {
+ prefix = worker_name_length;
+ bypass = 1;
+ } else {
+ prefix = sh_length;
+ bypass = 0;
+ }
+ if ( (worker_name_length <= url_length)
&& (worker_name_length > max_match)
- && (strncasecmp(url, worker->name, worker_name_length) == 0) ) {
+ && (strncasecmp(url, worker->name, prefix) == 0)
+ && (bypass || (strncmp(url + prefix, worker->name + prefix,
+ worker_name_length - prefix) == 0)) )
+ {
max_worker = worker;
max_match = worker_name_length;
}