Как разместить 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 ошибки.