function prepare()
 {
     global $REX, $REXPATH;
     $article_id = -1;
     $clang = $REX["CUR_CLANG"];
     if (!file_exists(FULLNAMES_PATHLIST)) {
         rex_rewriter_generate_pathnames(array());
     }
     // REXPATH wird auch im Backend benötigt, z.B. beim bearbeiten von Artikeln
     require_once FULLNAMES_PATHLIST;
     if (!$REX['REDAXO']) {
         $script_path = str_replace(' ', '%20', dirname($_SERVER['PHP_SELF']));
         $length = strlen($script_path);
         $path = substr($_SERVER['REQUEST_URI'], $length);
         // Serverdifferenzen angleichen
         if ($path[0] == '/') {
             $path = substr($path, 1);
         }
         // Parameter zählen nicht zum Pfad -> abschneiden
         if (($pos = strpos($path, '?')) !== false) {
             $path = substr($path, 0, $pos);
         }
         // Anker zählen nicht zum Pfad -> abschneiden
         if (($pos = strpos($path, '#')) !== false) {
             $path = substr($path, 0, $pos);
         }
         if ($path == '') {
             $this->setArticleId($REX['START_ARTICLE_ID']);
             return true;
         }
         // konvertiert params zu GET/REQUEST Variablen
         if ($this->use_params_rewrite) {
             if (strstr($path, '/+/')) {
                 $tmp = explode('/+/', $path);
                 $path = $tmp[0] . '/';
                 $vars = explode('/', $tmp[1]);
                 for ($c = 0; $c < count($vars); $c += 2) {
                     if ($vars[$c] != '') {
                         $_GET[$vars[$c]] = $vars[$c + 1];
                         $_REQUEST[$vars[$c]] = $vars[$c + 1];
                     }
                 }
             }
         }
         // aktuellen pfad mit pfadarray vergleichen
         foreach ($REXPATH as $key => $var) {
             foreach ($var as $k => $v) {
                 if ($path == $v) {
                     $article_id = $key;
                     $clang = $k;
                 }
             }
         }
         // Check Clang StartArtikel
         if ($article_id == -1) {
             foreach ($REX['CLANG'] as $key => $var) {
                 if ($var . '/' == $path || $var == $path) {
                     $clang = $key;
                 }
             }
         }
         // Check levenshtein
         if ($this->use_levenshtein && $article_id == -1) {
             foreach ($REXPATH as $key => $var) {
                 foreach ($var as $k => $v) {
                     $levenshtein[levenshtein($path, $v)] = $key . '#' . $k;
                 }
             }
             ksort($levenshtein);
             $best = explode('#', array_shift($levenshtein));
             $this->setArticleId($best[0]);
             $clang = $best[1];
         }
         if ($article_id == -1) {
             $article_id = $REX['NOTFOUND_ARTICLE_ID'];
         }
         $this->setArticleId($article_id, $clang);
     }
 }
 function prepare()
 {
     global $REX, $REXPATH;
     $article_id = -1;
     $clang = $REX["CUR_CLANG"];
     if (!file_exists(FULLNAMES_PATHLIST)) {
         rex_rewriter_generate_pathnames(array());
     }
     // REXPATH wird auch im Backend benötigt, z.B. beim bearbeiten von Artikeln
     require_once FULLNAMES_PATHLIST;
     if (!$REX['REDAXO']) {
         $script_path = str_replace(' ', '%20', dirname($_SERVER['PHP_SELF']));
         // ANDERE DIR_SEP ALS "/" ERSETZEN (WIN BACKSLASHES)
         $script_path = str_replace(DIRECTORY_SEPARATOR, '/', $script_path);
         $length = strlen($script_path);
         $path = substr($_SERVER['REQUEST_URI'], $length);
         // Serverdifferenzen angleichen
         if ($path[0] == '/') {
             $path = substr($path, 1);
         }
         // Parameter zählen nicht zum Pfad -> abschneiden
         if (($pos = strpos($path, '?')) !== false) {
             $path = substr($path, 0, $pos);
         }
         // Anker zählen nicht zum Pfad -> abschneiden
         if (($pos = strpos($path, '#')) !== false) {
             $path = substr($path, 0, $pos);
         }
         if ($path == '' || $path == $REX['FRONTEND_FILE']) {
             $this->setArticleId($REX['START_ARTICLE_ID']);
             return true;
         }
         // konvertiert params zu GET/REQUEST Variablen
         if ($this->use_params_rewrite) {
             if (strstr($path, '/+/')) {
                 $tmp = explode('/+/', $path);
                 $path = $tmp[0] . '/';
                 $vars = explode('/', $tmp[1]);
                 for ($c = 0; $c < count($vars); $c += 2) {
                     if ($vars[$c] != '') {
                         $_GET[$vars[$c]] = $vars[$c + 1];
                         $_REQUEST[$vars[$c]] = $vars[$c + 1];
                     }
                 }
             }
         }
         // aktuellen pfad mit pfadarray vergleichen
         foreach ($REXPATH as $key => $var) {
             foreach ($var as $k => $v) {
                 if ($path == $v) {
                     $article_id = $key;
                     $clang = $k;
                 }
             }
         }
         // Check Clang StartArtikel
         if ($article_id == -1) {
             foreach ($REX['CLANG'] as $key => $var) {
                 if ($var . '/' == $path || $var == $path) {
                     $clang = $key;
                 }
             }
         }
         // Check levenshtein
         if ($this->use_levenshtein && $article_id == -1) {
             foreach ($REXPATH as $key => $var) {
                 foreach ($var as $k => $v) {
                     $levenshtein[levenshtein($path, $v)] = $key . '#' . $k;
                 }
             }
             ksort($levenshtein);
             $best = explode('#', array_shift($levenshtein));
             $article_id = $best[0];
             $clang = $best[1];
         } elseif ($article_id == -1) {
             // ----- EXTENSION POINT
             $article_info = rex_register_extension_point('URL_REWRITE_ARTICLE_ID_NOT_FOUND', '');
             if (isset($article_info['article_id']) && $article_info['article_id'] > -1) {
                 $article_id = $article_info['article_id'];
                 if (isset($article_info['clang']) && $article_info['clang'] > -1) {
                     $clang = $article_info['clang'];
                 }
             }
             // Nochmals abfragen wegen EP
             if ($article_id == -1) {
                 // Damit auch die "index.php?article_id=xxx" Aufrufe funktionieren
                 if (rex_request('article_id', 'int', 0) > 0) {
                     $article_id = $REX['ARTICLE_ID'];
                 } else {
                     $article_id = $REX['NOTFOUND_ARTICLE_ID'];
                 }
             }
         }
         $this->setArticleId($article_id, $clang);
     }
 }