diff --git a/lib/request.js b/lib/request.js index 39eb339e1..1c0010719 100755 --- a/lib/request.js +++ b/lib/request.js @@ -165,18 +165,19 @@ Hoek.inherits(internals.Request, Events.EventEmitter); internals.Request.prototype._setUrl = function (url, stripTrailingSlash) { - if (stripTrailingSlash && - url.length > 1 && - url[url.length - 1] === '/') { - - url = url.slice(0, -1); - } - this.url = Url.parse(url, false); this.url.query = Qs.parse(this.url.query); // Override parsed value this.query = this.url.query; this.path = this.url.pathname || ''; // pathname excludes query + if (stripTrailingSlash && + this.path.length > 1 && + this.path[this.path.length - 1] === '/') { + + this.path = this.path.slice(0, -1); + this.url.pathname = this.path; + } + if (this.path && this.path.indexOf('%') !== -1) { diff --git a/test/request.js b/test/request.js index eb7c3c5b7..af3c11587 100755 --- a/test/request.js +++ b/test/request.js @@ -842,6 +842,17 @@ describe('Request', function () { done(); }); }); + + it('strips trailing slash with query', function (done) { + + var server = new Hapi.Server({ router: { stripTrailingSlash: true } }); + server.route({ method: 'GET', path: '/test', handler: function (request, reply) { reply(); } }); + server.inject('/test/?a=b', function (res) { + + expect(res.statusCode).to.equal(200); + done(); + }); + }); }); describe('#log', { parallel: false }, function () {