Exemplo n.º 1
0
 /**
  * Path::init($query)
  * $query может взять из QUERY_STRING или из URI_REQUEST если используется modrewrite
  * Если в $query начинается с символов ./ или -~! будет проверка файла на доступность и переадресация на него
  **/
 public static function init()
 {
     return Once::exec('infrajs::Path::init', function () {
         $res = URN::parse();
         $res['request2ch'] = $res['request2'] ? in_array($res['request2'][0], array('-', '~', '!')) : false;
         /*
         	Ситуация
         	site.ru/adsf?-admin/
         	site.ru/sadf?vendor/infrajs/admin/
         	site.ru/asdf?vendor/infrajs/admin/index.php
         */
         if ($res['request2ch'] || Path::theme($res['request2'])) {
             if ($res['param2']) {
                 Path::redirect($res['request2'] . '?' . $res['param2']);
             } else {
                 Path::redirect($res['request2']);
             }
         }
         /*
         	Ситуация
         	site/?login = site/login
         	site/-asdf?login = site/-asdf?login
         	site/catalog?contacts = site/contacts
         */
         $res['requestch'] = $res['request'] ? in_array($res['request'][0], array('-', '~', '!')) : false;
         if (!$res['requestch'] && !Path::theme($res['request']) && $res['request2']) {
             //Чтобы работали старые ссылки
             if ($res['param2']) {
                 Path::redirect($res['request2'] . '?' . $res['param2']);
             } else {
                 Path::redirect($res['request2']);
             }
         }
         //exit;
         //$res['request2dir'] = Path::isdir($res['request2']);
         //$res['request2ext'] = Path::getExt($res['request2']);
         $res['requestdir'] = Path::isdir($res['request']);
         if (!$res['request']) {
             $res['requestdir'] = true;
             $file = './';
         } else {
             $file = Path::theme($res['request']);
         }
         if ($res['requestch']) {
             //файл не проверяем. отсутствует всёравно идём в go
             $query = $res['query'];
             if ($res['requestdir']) {
                 $p = explode('?', $res['query'], 2);
                 $p[0] .= 'index.php';
                 $query = implode('?', $p);
                 if (!Path::theme($query)) {
                     $p = explode('?', $res['query'], 2);
                     $p[0] .= 'index.html';
                     $query = implode('?', $p);
                 }
             }
             if (Path::theme($query)) {
                 Path::go($query);
             }
         } else {
             if ($file) {
                 //Если файл отсутствует проходим дальше
                 if ($res['requestdir']) {
                     $p = explode('?', $res['query'], 2);
                     $p[0] .= 'index.php';
                     $file = implode('?', $p);
                     if (!Path::theme($file)) {
                         $p = explode('?', $res['query'], 2);
                         $p[0] .= 'index.html';
                         $file = implode('?', $p);
                     }
                 }
                 if (Path::theme($file)) {
                     //Если есть index.php в папке или просто указанный файл есть
                     Path::go($file);
                 }
             }
         }
         return $res['query'];
     });
 }