Как разместить Laravel в подпапке и исправить 404 ошибку

    Размещение Laravel-приложения в подкаталоге (например, my-laravel-app.ru/laravel/) - частая задача при разработке или тестировании. Однако после переноса файлов и настройки .htaccess вы можете столкнуться с 404 ошибкой, которую возвращает сам фреймворк. Разберём причины и пошаговое решение.

    Почему возникает 404 ошибка в Laravel при установке в подпапку

    Основная причина - неверная настройка RewriteBase и отсутствие коррекции пути в конфигурации Laravel. Фреймворк ожидает, что его корень совпадает с корнем домена, а при размещении в подпапке требуется явно указать базовый URL и поправить правила перезаписи.

    Пошаговая инструкция по исправлению

    1. Проверьте структуру папок

    Убедитесь, что все файлы Laravel (app, bootstrap, config, public и т.д.) находятся внутри public_html/laravel/. Папка public должна быть вложенной: laravel/public/.

    2. Настройте .htaccess в корне Laravel

    В файле public_html/laravel/.htaccess используйте следующий код для перенаправления запросов в папку public:

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteRule ^(.*)$ public/$1 [L]
    </IfModule>

    3. Исправьте .htaccess в папке public

    В файле public_html/laravel/public/.htaccess обязательно укажите правильный RewriteBase:

    <IfModule mod_rewrite.c>
        <IfModule mod_negotiation.c>
            Options -MultiViews
        </IfModule>
    
        RewriteEngine On
        RewriteBase /laravel/
    
        # Redirect Trailing Slashes...
        RewriteRule ^(.*)/$ /$1 [L,R=301]
    
        # Handle Front Controller...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ index.php [L]
    </IfModule>

    Ключевая строка - RewriteBase /laravel/. Без неё Laravel неправильно обрабатывает относительные пути.

    4. Обновите конфигурацию Laravel

    Откройте файл public_html/laravel/config/app.php и измените параметр url:

    'url' => 'http://my-laravel-app.ru/laravel',

    Если используете HTTPS, укажите https://my-laravel-app.ru/laravel. Это заставит фреймворк генерировать правильные ссылки.

    5. Очистите кэш конфигурации

    После изменений выполните команды (через SSH или панель хостинга):

    php artisan config:cache
    php artisan route:cache

    Это обновит кэш и применит новые настройки.

    Дополнительные советы по устранению ошибок

    • Проверьте права доступа к папкам storage и bootstrap/cache - они должны быть доступны для записи веб-серверу.
    • Убедитесь, что mod_rewrite включён на сервере. Без него правила .htaccess не работают.
    • Если 404 сохраняется, временно включите отладку в .env (APP_DEBUG=true), чтобы увидеть детальную ошибку.
    • Для абсолютных ссылок в шаблонах используйте хелпер url('/laravel/...') - это гарантирует корректный путь.

    Заключение

    Размещение Laravel в подпапке требует настройки двух .htaccess и конфигурации приложения. Главные моменты - правильный RewriteBase и указание базового URL в config/app.php. После этих шагов сайт будет доступен по адресу my-laravel-app.ru/laravel/ без 404 ошибки.

    Часто задаваемые вопросы