This package is deprecated Please consider using an stable alternative for any production code.

Http, Https URI

Starting with version 1.1.0 all URI objects are defined in the League\Uri namespace. The League\Uri\Schemes namespace is deprecated and will be removed in the next major release.

Instantiation

To work with Http URIs you can use the League\Uri\Http class. This class handles secure and insecure Http URI. In addition to the default named constructors, the Http class can be instantiated using the server variables.

<?php

use League\Uri;

//don't forget to provide the $_SERVER array
$uri = Uri\Http::createFromServer($_SERVER);

The method only relies on the server's safe parameters to determine the current URI. If you are using the library behind a proxy the result may differ from your expectation as no $_SERVER['HTTP_X_*'] header is taken into account for security reasons.

Validation

The scheme of a HTTP(s) URI must be equal to http, https or be equal to null.

Authority presence

If a scheme is present and the scheme specific part of a Http URI is not empty the URI can not contain an empty authority. Thus, some Http URI modifications must be applied in a specific order to preserve the URI validation.

<?php

use League\Uri;

$uri = Uri\Http::createFromString('http://uri.thephpleague.com/');
echo $uri->withHost('')->withScheme('');
// will throw an League\Uri\UriException
// you can not remove the Host if a scheme is present

Instead you are required to proceed as below

<?php

use League\Uri;

$uri = Uri\Http::createFromString('http://uri.thephpleague.com/');
echo $uri->withScheme('')->withHost(''); //displays "/"

When an invalid URI object is created an UriException exception is thrown

Path validity

According to RFC3986, if an HTTP URI contains a non empty authority part, the URI path must be the empty string or absolute. Thus, some modification may trigger an UriException.

<?php

use League\Uri;

$uri = Uri\Http::createFromString('http://uri.thephpleague.com/');
echo $uri->withPath('uri/schemes/http');
// will throw an League\Uri\UriException

Instead you are required to submit a absolute path

<?php

use League\Uri;

$uri = Uri\Http::createFromString('http://uri.thephpleague.com/');
echo $uri->withPath('/uri/schemes/http'); // displays 'http://uri.thephpleague.com/uri/schemes/http'

Of note this does not mean that rootless path are forbidden, the following code is fine.

<?php

use League\Uri;

$uri = Uri\Http::createFromString('?foo=bar');
echo $uri->withPath('uri/schemes/http'); // displays 'uri/schemes/http?foo=bar'

Relation with PSR-7

The Http class implements the PSR-7 UriInterface interface. This means that you can use this class anytime you need a PSR-7 compliant URI object.