/** * Return the URI of the request regardless of the server * * @return KHttpUrl A KHttpUri object */ public static function url() { if (!isset(self::$_url)) { $url = self::protocol() . '://'; if (PHP_SAPI !== 'cli') { /* * Since we are assigning the URI from the server variables, we first need * to determine if we are running on apache or IIS. If PHP_SELF and REQUEST_URI * are present, we will assume we are running on apache. */ if (!empty($_SERVER['PHP_SELF']) && !empty($_SERVER['REQUEST_URI'])) { /* * To build the entire URI we need to prepend the protocol, and the http host * to the URI string. */ $url .= $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; /* * Since we do not have REQUEST_URI to work with, we will assume we are * running on IIS and will therefore need to work some magic with the SCRIPT_NAME and * QUERY_STRING environment variables. */ } else { // IIS uses the SCRIPT_NAME variable instead of a REQUEST_URI variable $url .= $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']; // If the query string exists append it to the URI string if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) { $url .= '?' . $_SERVER['QUERY_STRING']; } } } else { $url .= 'koowa'; } // Sanitize the url since we can't trust the server var $url = KService::get('koowa:filter.url')->sanitize($url); // Create the URI object self::$_url = KService::get('koowa:http.url', array('url' => $url)); } return self::$_url; }