diff --git a/lib/node-http-proxy/proxy-table.js b/lib/node-http-proxy/proxy-table.js index 9035ab8da..d5ec7fdc7 100644 --- a/lib/node-http-proxy/proxy-table.js +++ b/lib/node-http-proxy/proxy-table.js @@ -26,7 +26,8 @@ var util = require('util'), events = require('events'), - fs = require('fs'); + fs = require('fs'), + url = require('url'); // // ### function ProxyTable (router, silent) @@ -137,17 +138,17 @@ ProxyTable.prototype.getProxyLocation = function (req) { for (var i in this.routes) { var route = this.routes[i]; if (target.match(route.route)) { - var pathSegments = route.path.split('/'); - - if (pathSegments.length > 1) { - // don't include the proxytable path segments in the proxied request url - pathSegments = new RegExp("/" + pathSegments.slice(1).join('/')); - req.url = req.url.replace(pathSegments, ''); - } - - var location = route.target.split(':'), - host = location[0], - port = location.length === 1 ? 80 : location[1]; + var requrl = url.parse(req.url); + //add the 'http://'' to get around a url.parse bug, it won't actually be used. + var targeturl = url.parse('http://'+route.target); + var pathurl = url.parse('http://'+route.path); + + //This replaces the path's part of the URL to the target's part of the URL. + requrl.pathname = requrl.pathname.replace(pathurl.pathname, targeturl.pathname); + req.url = url.format(requrl); + + var host = targeturl.hostname, + port = targeturl.port || 80; return { port: port,