public static function parse() { if (!self::$parsed) { // Request String speichern self::$request_uri = $_SERVER['REQUEST_URI']; // Prüfen, ob HTTPs verwendet wird self::$request_secure = false; if (isset($_SERVER['HTTPS'])) { if ($_SERVER['HTTPS'] != '') { self::$request_secure = true; } } // Den Teil, der von interesse ist, extrahieren // Wenn die baseUrl z.B. http://www.pixelproduction.de/cms/ lautet, // und der entsprechende Request-URI /cms/admin/bla/, // dann schneiden wir das /cms am Anfang heraus, da uns ja nur das /admin/bla/ interessiert... // So kann man das CMS in einem beliebigen Unter-Verzeichnis auf dem Server installieren // und alles funktioniert trotzdem :-) $base_request_string = self::extractRequestUri(Config::get()->baseUrl); if (UTF8String::substr(self::$request_uri, 0, UTF8String::strlen($base_request_string)) != $base_request_string) { die('Fehlerhafter REQUEST_URI oder fehlerhafte Konfiguration. Bitte wenden Sie sich an den Administrator dieser Website.'); } else { self::$request_uri = UTF8String::substr(self::$request_uri, UTF8String::strlen($base_request_string), UTF8String::strlen(self::$request_uri)); } // Die URI in ihre bestandteile (Pfad, Parameter, Anker) zerlegen // Laut PHP Doku muss es eine absolute, vollständige URL sein, ist aber egal, weil wir Protokoll und Server sowieso ignorieren, // also nehmen wir einfach irgeneinen Server an... $url = parse_url('http://www.pixelproduction.de/' . self::$request_uri); // Den Pfad auslesen und in seine Teile zerlegen und in Array ablegen self::$request_path = array(); if (isset($url['path'])) { $url_path = trim($url['path'], '/'); if ($url_path != '') { self::$request_path = explode('/', $url_path); } } // ggf. die GET-Parameter in Array ablegen self::$request_parameters = array(); if (isset($url['query'])) { $query = explode('&', $url['query']); if (is_array($query)) { foreach ($query as $parameter) { $key_value_pair = explode('=', $parameter); if (is_array($key_value_pair)) { if (isset($key_value_pair[0])) { self::$request_parameters[$key_value_pair[0]] = ''; if (isset($key_value_pair[1])) { self::$request_parameters[$key_value_pair[0]] = $key_value_pair[1]; } } } } } } // Herausfinden, ob das Frontend oder das Backend angefordert wird self::$front_end = true; if (count(self::$request_path) > 0) { // Wenn der erste Teil nach der Basis-URL "admin" ist, dann geht's zum Back-End, ansonsten zum Front-End $firstPathSegment = strtolower(self::$request_path[0]); self::$front_end = !in_array($firstPathSegment, array('admin', 'pm:api')); if ($firstPathSegment == 'admin') { // Das "admin" braucht man nicht als ersten Teil, da man ja dann sowieso weiß, dass man sich im Backend befindet... array_splice(self::$request_path, 0, 1); } if ($firstPathSegment == 'pm:api') { self::$request_path[0] = 'api'; } } self::$parsed = true; } }