<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once 'Common.php';

try {
    $PathUri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    // 处理根路径访问
    //if ($PathUri == '/' || empty($PathUri)) {
        //header('Location: /view/main/index.html');
        //exit;
    //}
    // 安全检查：路径长度和字符
    if (strlen($PathUri) > 255 || 
        !preg_match('/^\/[a-zA-Z0-9\/\-_\.]+$/', $PathUri)) {
        die($LinJson->error("非法路径!"));
    }
    
    // 提取当前目录和路径
    $PathList = explode('/', trim($PathUri, '/'));
    $ViewsDir = array_shift($PathList);
   
    // 检查目录权限
    $allowedDirs = array_map(function($dir) {
        return trim(str_replace('/', '', $dir));
    }, WEBSITE['VIEW']);
   
    if (!in_array($ViewsDir, $allowedDirs)) {
        die($LinJson->error("访问受限：只允许访问指定目录!"));
    }
    // 移除文件扩展名
    $ExtName = end($PathList);
    foreach (WEBSITE['MIME'] as $ext) {
        $ExtName = str_replace('.' . $ext, '', $ExtName);
    }
    $PathList[count($PathList) - 1] = $ExtName;
    // 安全检查：防止目录遍历
    if (in_array('..', $PathList)) {
        die($LinJson->error("非法路径!"));
    }
    // 构建文件路径
    $action    = array_pop($PathList);
    $ViewsList = implode('/', $PathList);
    // 按优先级尝试加载文件
    $LoadViews = [
        WEBSITE['ROOT'] . '/' . $ViewsDir . '/' . $ViewsList . '/' . $action . '.php',  // 直接方式
        WEBSITE['ROOT'] . '/' . $ViewsDir . '/' . $ViewsList . '.php'  // action方式
        
    ];
    
    foreach ($LoadViews as $key => $path) {
        $path = preg_replace('/\/+/', '/', $path);
        if (is_file($path)) {
            if ($key === 1) {
                if (!preg_match('/^[a-zA-Z0-9_]+$/', $action)) {
                    die($LinJson->error("非法action参数!"));
                }
                $_GET['action'] = $action;
            }
            require $path;
            exit;
        }
    }
    die($LinJson->error("找不到文件：" . $PathUri));
} catch (Exception $e) {
    //var_dump($e);
    die($LinJson->error("admin.php-发生致命错误！".$e->getMessage()));
}
?>