diff --git a/src/Symfony/Component/HttpFoundation/Request.php b/src/Symfony/Component/HttpFoundation/Request.php index 89611660add2f..8224c0d9b8ee1 100644 --- a/src/Symfony/Component/HttpFoundation/Request.php +++ b/src/Symfony/Component/HttpFoundation/Request.php @@ -1837,6 +1837,13 @@ protected function prepareRequestUri() } elseif ($this->server->has('REQUEST_URI')) { $requestUri = $this->server->get('REQUEST_URI'); + // The REQUEST_URI starts with double slashes. + if (0 === strpos($requestUri, '//')) { + // We assume that the scheme and host are not provided (e.g. //path/too). + // Then patch the call to `parse_url()`. + $requestUri = "http://example.com$requestUri"; + } + // HTTP proxy reqs setup request URI with scheme and host [and port] + the URL path, only use URL path $uriComponents = parse_url($requestUri); diff --git a/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php b/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php index 539bb69cfb7ce..0fb606ad4fb55 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php +++ b/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php @@ -281,6 +281,10 @@ public function testCreateWithRequestUri() $request = Request::create('http://test.com/foo#bar'); $request->server->set('REQUEST_URI', 'http://test.com/foo#bar'); $this->assertEquals('http://test.com/foo', $request->getUri()); + + $request = Request::create('http://foo//bar/foo'); + $request->server->set('REQUEST_URI', '//bar/foo'); + $this->assertEquals('//bar/foo', $request->getPathInfo(), 'When the REQUEST_URI starts with double slashes.'); } public function testCreateCheckPrecedence()