SparkyToster
@SparkyToster
PHP (Laravel) developer, student, human being.

Почему не работает сайт на хостинге (возможно из-за .htaccess)?

Учился разрабатывать новостной-блог сайт на локальной машине у себя на ноутбуке 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.
Жду помощи, другой код могу тоже кинуть по надобности!

структура проекта:
5bba11a465328081396439.png

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>
  • Вопрос задан
  • 939 просмотров
Пригласить эксперта
Ответы на вопрос 1
SagePtr
@SagePtr
Еда - это святое
А регистр имён файлов правильный? Если разрабатывать на винде, можно не учесть этот аспект, а на других ОС - это важно.

Если логов ошибок на хостинге нет - то либо поищите их (может быть, они хитро запрятаны), либо бегите подальше от такого хостера, в случае любой проблемы вы будете либо слепым котёнком, либо вангой.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽