Index: modules/proxy/mod_proxy.c =================================================================== --- modules/proxy/mod_proxy.c (revision 1753164) +++ modules/proxy/mod_proxy.c (working copy) @@ -1273,17 +1273,25 @@ * the error page on the proxy or if the error was not generated by the * backend itself but by the proxy e.g. a bad gateway) in order to give * ap_proxy_post_request a chance to act correctly on the status code. + * But only do the above if access_status is not OK or DONE, because + * in this case r->status might contain the true status and overwriting + * it with OK or DONE would be wrong. */ - saved_status = r->status; - r->status = access_status; - ap_proxy_post_request(worker, balancer, r, conf); - /* - * Only restore r->status if it has not been changed by - * ap_proxy_post_request as we assume that this change was intentional. - */ - if (r->status == access_status) { - r->status = saved_status; + if ((access_status != OK) || (access_status != DONE)) { + saved_status = r->status; + r->status = access_status; + ap_proxy_post_request(worker, balancer, r, conf); + /* + * Only restore r->status if it has not been changed by + * ap_proxy_post_request as we assume that this change was intentional. + */ + if (r->status == access_status) { + r->status = saved_status; + } } + else { + ap_proxy_post_request(worker, balancer, r, conf); + } proxy_run_request_status(&access_status, r); AP_PROXY_RUN_FINISHED(r, attempts, access_status);