public function redirect(string $absoluteUri, int $redirectCode = 307) : Host
{
if (!($url = @parse_url($absoluteUri))) {
throw new \DomainException("Invalid redirect URI");
}
if (empty($url["scheme"]) || $url["scheme"] !== "http" && $url["scheme"] !== "https") {
throw new \DomainException("Invalid redirect URI; \"http\" or \"https\" scheme required");
}
if (isset($url["query"]) || isset($url["fragment"])) {
throw new \DomainException("Invalid redirect URI; Host redirect must not contain a query or fragment component");
}
$redirectUri = rtrim($absoluteUri, "/") . "/";
if ($redirectCode < 300 || $redirectCode > 399) {
throw new \DomainException("Invalid redirect code; code in the range 300..399 required");
}
$this->redirect = static function (Request $req, Response $res) use($redirectUri, $redirectCode) {
$res->setStatus($redirectCode);
$res->setHeader("location", $redirectUri . \ltrim($req->getUri(), "/"));
$res->end();
};
return $this;
}