/** * Some parts of eZ do not benefit from the enhanced checks implemented * in eZSys::isSSLNow(), especially when using an SSL reverse proxy * configured to send the HTTP_X_FORWARDED_PROTO header. * * @link http://issues.ez.no/21731 */ public function test_createRedirectUrl() { $path = '/a/root/rel/ative'; self::assertEquals('http://example.com' . $path, eZHTTPTool::createRedirectUrl($path, array())); $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'https'; self::assertEquals('https://example.com' . $path, eZHTTPTool::createRedirectUrl($path, array())); unset($_SERVER['HTTP_X_FORWARDED_PROTO']); }
/** * \static * Performs an HTTP redirect. * * \param $path The path to redirect * \param $parameters \see createRedirectUrl() * \param $status The HTTP status code as a string * \param $encodeURL Encode the URL. This should normally be true, but * may be set to false to avoid double encoding when redirect() is called * twice. */ static function redirect($path, $parameters = array(), $status = false, $encodeURL = true) { $url = eZHTTPTool::createRedirectUrl($path, $parameters); if (strlen($status) > 0) { header($_SERVER['SERVER_PROTOCOL'] . " " . $status); eZHTTPTool::headerVariable("Status", $status); } if ($encodeURL) { $url = eZURI::encodeURL($url); } eZHTTPTool::headerVariable('Location', $url); /* Fix for redirecting using workflows and apache 2 */ echo '<HTML><HEAD>'; echo '<META HTTP-EQUIV="Refresh" Content="0;URL=' . htmlspecialchars($url) . '">'; echo '<META HTTP-EQUIV="Location" Content="' . htmlspecialchars($url) . '">'; echo '</HEAD><BODY></BODY></HTML>'; }
/** * Performs an HTTP redirect. * * @param string $path The path to redirect to * @param array $parameters See createRedirectUrl(). Defaults to empty array. * @param bool $status The HTTP status code as a string (code + text, e.g. "302 Found"). Defaults to false. * @param bool $encodeURL Encodes the URL. * This should normally be true, but may be set to false to avoid double encoding when redirect() is called twice. * Defaults to true * @param bool $returnRedirectObject If true, will return an ezpKernelRedirect object. * * @return null|ezpKernelRedirect */ static function redirect($path, $parameters = array(), $status = false, $encodeURL = true, $returnRedirectObject = false) { $url = eZHTTPTool::createRedirectUrl($path, $parameters); if (strlen($status) > 0) { header($_SERVER['SERVER_PROTOCOL'] . " " . $status); eZHTTPTool::headerVariable("Status", $status); } if ($encodeURL) { $url = eZURI::encodeURL($url); } eZHTTPTool::headerVariable('Location', $url); /* Fix for redirecting using workflows and apache 2 */ $escapedUrl = htmlspecialchars($url); $content = <<<EOT <HTML><HEAD> <META HTTP-EQUIV="Refresh" Content="0;URL={$escapedUrl}"> <META HTTP-EQUIV="Location" Content="{$escapedUrl}"> </HEAD><BODY></BODY></HTML> EOT; if ($returnRedirectObject) { return new ezpKernelRedirect($url, $status ?: null, $content); } echo $content; }