8000 [HttpFoundation] Fixed absolute Request URI with default port · symfony/symfony@dbde28e · GitHub
[go: up one dir, main page]

Skip to content

Commit dbde28e

Browse files
[HttpFoundation] Fixed absolute Request URI with default port
1 parent 236565c commit dbde28e

File tree

2 files changed

+48
-4
lines changed

2 files changed

+48
-4
lines changed

src/Symfony/Component/HttpFoundation/Request.php

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1835,11 +1835,15 @@ protected function prepareRequestUri()
18351835
$this->server->remove('UNENCODED_URL');
18361836
$this->server->remove('IIS_WasUrlRewritten');
18371837
} elseif ($this->server->has('REQUEST_URI')) {
1838-
$requestUri = $this->server->get('REQUEST_URI');
18391838
// HTTP proxy reqs setup request URI with scheme and host [and port] + the URL path, only use URL path
1840-
$schemeAndHttpHost = $this->getSchemeAndHttpHost();
1841-
if (0 === strpos($requestUri, $schemeAndHttpHost)) {
1842-
$requestUri = substr($requestUri, \strlen($schemeAndHttpHost));
1839+
$parsedUri = parse_url($this->server->get('REQUEST_URI'));
1840+
1841+
if (isset($parsedUri['path'])) {
1842+
$requestUri = $parsedUri['path'];
1843+
}
1844+
1845+
if (isset($parsedUri['query'])) {
1846+
$requestUri .= '?'.$parsedUri['query'];
18431847
}
18441848
} elseif ($this->server->has('ORIG_PATH_INFO')) {
18451849
// IIS 5.0, PHP as CGI

src/Symfony/Component/HttpFoundation/Tests/RequestTest.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,46 @@ public function testCreate()
234234
$this->assertFalse($request->isSecure());
235235
}
236236

237+
public function testCreateWithRequestUri()
238+
{
239+
$request = Request::create('http://test.com:80/foo');
240+
$request->server->set('REQUEST_URI', 'http://test.com:80/foo');
241+
$this->assertEquals('http://test.com/foo', $request->getUri());
242+
$this->assertEquals('/foo', $request->getPathInfo());
243+
$this->assertEquals('test.com', $request->getHost());
244+
$this->assertEquals('test.com', $request->getHttpHost());
245+
$this->assertEquals(80, $request->getPort());
246+
$this->assertFalse($request->isSecure());
247+
248+
$request = Request::create('http://test.com:8080/foo');
249+
$request->server->set('REQUEST_URI', 'http://test.com:8080/foo');
250+
$this->assertEquals('http://test.com:8080/foo', $request->getUri());
251+
$this->assertEquals('/foo', $request->getPathInfo());
252+
$this->assertEquals('test.com', $request->getHost());
253+
$this->assertEquals('test.com:8080', $request->getHttpHost());
254+
$this->assertEquals(8080, $request->getPort());
255+
$this->assertFalse($request->isSecure());
256+
257+
$request = Request::create('http://test.com/foo?bar=foo', 'GET', array('bar' => 'baz'));
258+
$request->server->set('REQUEST_URI', 'http://test.com/foo?bar=foo');
259+
$this->assertEquals('http://test.com/foo?bar=baz', $request->getUri());
260+
$this->assertEquals('/foo', $request->getPathInfo( C52F ));
261+
$this->assertEquals('bar=baz', $request->getQueryString());
262+
$this->assertEquals('test.com', $request->getHost());
263+
$this->assertEquals('test.com', $request->getHttpHost());
264+
$this->assertEquals(80, $request->getPort());
265+
$this->assertFalse($request->isSecure());
266+
267+
$request = Request::create('https://test.com:443/foo');
268+
$request->server->set('REQUEST_URI', 'https://test.com:443/foo');
269+
$this->assertEquals('https://test.com/foo', $request->getUri());
270+
$this->assertEquals('/foo', $request->getPathInfo());
271+
$this->assertEquals('test.com', $request->getHost());
272+
$this->assertEquals('test.com', $request->getHttpHost());
273+
$this->assertEquals(443, $request->getPort());
274+
$this->assertTrue($request->isSecure());
275+
}
276+
237277
public function testCreateCheckPrecedence()
238278
{
239279
// server is used by default

0 commit comments

Comments
 (0)
0