Index: docs/manual/mod/mod_proxy.xml =================================================================== --- docs/manual/mod/mod_proxy.xml (revision 689534) +++ docs/manual/mod/mod_proxy.xml (working copy) @@ -832,6 +832,13 @@ and url encoded id (like servlet containers) use | to to separate them. The first part is for the cookie the second for the path. + scolonpathdelim + Off + If set to On the semi-colon character ';' will be + used as an additional sticky session path deliminator/separator. This + is mainly used to emulate mod_jk's behavior when dealing with paths such + as JSESSIONID=6736bcf34;foo=aabfa + timeout 0 Balancer timeout in seconds. If set this will be the maximum time Index: modules/proxy/mod_proxy_balancer.c =================================================================== --- modules/proxy/mod_proxy_balancer.c (revision 689534) +++ modules/proxy/mod_proxy_balancer.c (working copy) @@ -127,10 +127,14 @@ * Something like 'JSESSIONID=12345...N' */ static char *get_path_param(apr_pool_t *pool, char *url, - const char *name) + const char *name, int scolon_sep) { char *path = NULL; + char *pathdelims = "?&"; + if (scolon_sep) { + pathdelims = ";?&"; + } for (path = strstr(url, name); path; path = strstr(path + 1, name)) { path += strlen(name); if (*path == '=') { @@ -140,7 +144,7 @@ ++path; if (strlen(path)) { char *q; - path = apr_strtok(apr_pstrdup(pool, path), "?&", &q); + path = apr_strtok(apr_pstrdup(pool, path), pathdelims, &q); return path; } } @@ -268,7 +272,7 @@ /* Try to find the sticky route inside url */ *sticky_used = sticky_path; - *route = get_path_param(r->pool, *url, sticky_path); + *route = get_path_param(r->pool, *url, sticky_path, balancer->scolonsep); if (!*route) { *route = get_cookie_param(r, sticky); *sticky_used = sticky; Index: modules/proxy/mod_proxy.c =================================================================== --- modules/proxy/mod_proxy.c (revision 689534) +++ modules/proxy/mod_proxy.c (working copy) @@ -338,6 +338,18 @@ } return "unknown lbmethod"; } + else if (!strcasecmp(key, "scolonpathdelim")) { + /* If set to 'on' then ';' will also be + * used as a session path separator/delim (ala + * mod_jk) + */ + if (!strcasecmp(val, "on")) + balancer->scolonsep = 1; + else if (!strcasecmp(val, "off")) + balancer->scolonsep = 0; + else + return "scolonpathdelim must be On|Off"; + } else { return "unknown Balancer parameter"; } Index: modules/proxy/mod_proxy.h =================================================================== --- modules/proxy/mod_proxy.h (revision 689534) +++ modules/proxy/mod_proxy.h (working copy) @@ -382,6 +382,7 @@ apr_thread_mutex_t *mutex; /* Thread lock for updating lb params */ #endif void *context; /* general purpose storage */ + int scolonsep; /* true if ';' seps sticky session paths */ }; struct proxy_balancer_method { Index: include/ap_mmn.h =================================================================== --- include/ap_mmn.h (revision 689534) +++ include/ap_mmn.h (working copy) @@ -128,6 +128,7 @@ * structure * 20051115.15(2.2.9) Add interpolate_env to proxy_dir_conf and * introduce proxy_req_conf. + * 20051115.16(2.2.10) Add scolonsep to proxy_balancer * */ @@ -136,7 +137,7 @@ #ifndef MODULE_MAGIC_NUMBER_MAJOR #define MODULE_MAGIC_NUMBER_MAJOR 20051115 #endif -#define MODULE_MAGIC_NUMBER_MINOR 15 /* 0...n */ +#define MODULE_MAGIC_NUMBER_MINOR 16 /* 0...n */ /** * Determine if the server's current MODULE_MAGIC_NUMBER is at least a