Description: Fix PATH_INFO on mod_proxy_fcgi.c for Apache 2.4.10 --- a/apache2-2.4.10/modules/proxy/mod_proxy_fcgi.c +++ b/apache2-2.4.10/modules/proxy/mod_proxy_fcgi.c @@ -76,11 +76,29 @@ static int proxy_fcgi_canon(request_rec ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(01060) "set r->filename to %s", r->filename); - if (apr_table_get(r->subprocess_env, "proxy-fcgi-pathinfo")) { - r->path_info = apr_pstrcat(r->pool, "/", path, NULL); - - ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(01061) - "set r->path_info to %s", r->path_info); + /* According to RFC 3875 PATH_INFO should contain the portion + * of the URI to be interpreted by the FCGI script. In general + * terms that would be the portion _after_ the script name. + */ + // if (apr_table_get(r->subprocess_env, "proxy-fcgi-pathinfo")) { + // r->path_info = apr_pstrcat(r->pool, "/", path, NULL); + // + // ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(01061) + // "set r->path_info to %s", r->path_info); + //} + int sru_p = strlen(path)-1; + while ( path[sru_p] != '.' ) { sru_p--; } + while ( path[sru_p] && ((path[sru_p] != '/') && (path[sru_p] != '?')) && sru_p < strlen(path)) { + sru_p++; + } + if (sru_p && path[sru_p]) { + if (r->args) { + r->path_info = apr_pstrcat(r->pool, apr_pstrndup(r->pool, path + sru_p, strlen(path) - sru_p), "?", r->args, NULL); + } else { + r->path_info = apr_pstrndup(r->pool, path + sru_p, strlen(path) - sru_p); + } + ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(01061) + "set r->path_into to %s", r->path_info); } return OK;