Учился разрабатывать новостной-блог сайт на локальной машине у себя на ноутбуке OSPanel, Apache-7.2-PHP, PHP 7.2 x64. Windows 10
На сайте реализовал роутинг и сделал фронт-контроллер, все работает отлично. Но когда начал переносить на хостинг - все летит :(.
Сначала думал на spl_auto_register(), сделал автозагрузку через Composer. Я так полагаю, что проблема либо в загрузке классов либо в том, что не срабатывает второй .htaccess файл, который перенаправляет на фронт-контроллер index.php и устанавливает $_GET атрибут, который в дальнейшем я использую для роутинга, потому что когда пытаюсь его вывести через echo уже все ломается, ошибок не вижу ибо прилетает error 500 (хостинг бесплатный Beget). В коде снизу приложу структуру своего проекта, .htaccess файл (второй), который перенаправляет на index.php и свой index.php.
Жду помощи, другой код могу тоже кинуть по надобности!
структура проекта:
index.php:
use MyProject\View\View;
try
{
require __DIR__ . '/../vendor/autoload.php';
$route = $_GET['route'] ?? '';
$routes = require __DIR__ . '/../src/routes.php';
$isRouteFound = false;
foreach ($routes as $pattern => $controllerAndAction)
{
preg_match($pattern, $route, $matches);
if (!empty($matches)) {
$isRouteFound = true;
break;
}
}
if (!$isRouteFound)
{
throw new \MyProject\Exceptions\NotFoundException();
}
unset($matches[0]);
$controllerName = $controllerAndAction[0];
$actionName = $controllerAndAction[1];
if (method_exists($controllerName, $actionName))
{
$controller = new $controllerName();
$controller->$actionName(...$matches);
} else
{
$view = new View(__DIR__ . '/../templates');
$view->renderHtml('errors/404.php', [], 404);
return;
}
} catch (\MyProject\Exceptions\DbException $e)
{
$view = new View(__DIR__ . '/../templates/errors');
$view->renderHtml('500.php', ['error' => $e->getMessage()], 500);
} catch (\MyProject\Exceptions\NotFoundException $e)
{
$view = new View(__DIR__ . '/../templates/errors');
$view->renderHtml('404.php', ['error' => $e->getMessage()], 404);
} catch (\MyProject\Exceptions\UnauthorizedException $e)
{
$view = new \MyProject\View\View(__DIR__ . '/../templates/errors');
$view->renderHtml('401.php', ['error' => $e->getMessage()], 401);
} catch (\MyProject\Exceptions\Forbidden $e)
{
$view = new \MyProject\View\View(__DIR__ . '/../templates/errors');
$view->renderHtml('403.php', ['error' => $e->getMessage()], 403);
}
.htaccess который должен перенаправлять запросы из webroot/ на webroot/index.php :
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ ./index.php?route=$1 [QSA,L]
</IfModule>