galeria.php (lista todos os projetos) * projeto.klicai.com.br/{nome}/{qualquer} -> redireciona pra URL real do sandbox * * Só serve projetos REAIS do Webai (treino = 0, identificador = 'webai'). * Projetos de Modo Treino vivem em treino.klicai.com.br — nunca aqui. * * ⚠️ POR QUE REDIRECIONAR EM VEZ DE SERVIR O ARQUIVO DIRETO DAQUI: mesma * razão do antigo projeto-router.php — os sandboxes podem ter PHP de * verdade, e o isolamento de segurança (.user.ini + open_basedir) só vale * pro script que o Apache executa DIRETAMENTE pra aquela requisição. Um * include() feito a partir daqui rodaria o PHP do usuário sem esse * isolamento — buraco de segurança sério. Redirecionar é seguro e simples. * ------------------------------------------------------------ */ declare(strict_types=1); require_once __DIR__ . '/../config.php'; require_once __DIR__ . '/../app/webai/config.php'; $caminhoCompleto = trim((string) ($_GET['caminho'] ?? ''), '/'); // Raiz do domínio, sem nome nenhum -> galeria de todos os projetos if ($caminhoCompleto === '') { require __DIR__ . '/galeria.php'; exit; } $partes = explode('/', $caminhoCompleto, 2); $nomeProjeto = strtolower(trim($partes[0])); $caminhoRel = $partes[1] ?? ''; if ($nomeProjeto === '' || !webaiSlugValido($nomeProjeto)) { http_response_code(404); echo 'Projeto não encontrado.'; exit; } if (!isset($pdoProjetos) || !($pdoProjetos instanceof PDO)) { error_log('[projeto.klicai] $pdoProjetos não está definida no config.php central.'); http_response_code(503); echo 'Serviço temporariamente indisponível.'; exit; } $projeto = webaiObterProjetoPorNome($pdoProjetos, $nomeProjeto); // Este domínio só serve projetos REAIS do Webai — nunca treino (isso é // treino.klicai.com.br) nem de outro app que porventura compartilhe o // mesmo banco klicai_projetos. if (!$projeto || $projeto['identificador'] !== WEBAI_IDENTIFICADOR || !empty($projeto['treino'])) { http_response_code(404); echo 'Projeto não encontrado.'; exit; } $urlDestino = rtrim(webaiUrlSandbox($projeto['usuario_uuid'], (int) $projeto['slot']), '/') . '/' . ($caminhoRel !== '' ? $caminhoRel : ''); header('Location: ' . $urlDestino, true, 302); exit;