Laravel 5.5仅根路由("/")可用,其余路由报404错误求助
看你描述的情况,项目在其他环境正常,克隆后出现404,大概率是当前服务器的配置细节没踩对,我给你梳理几个最常见的排查点:
1. 修正Apache站点根目录指向
你提到请求URL里带了/public/,这几乎可以确定是Apache站点根目录设错了——Laravel的入口文件在public/index.php,必须把站点根指向public子目录,而不是项目根文件夹。
找到你的Apache站点配置文件(一般在/etc/apache2/sites-available/your-site.conf),修改成这样:
<VirtualHost *:80> ServerName your-domain-or-ip DocumentRoot /var/www/your-project-path/public # 重点:指向public目录 <Directory /var/www/your-project-path/public> AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/your-site-error.log CustomLog ${APACHE_LOG_DIR}/your-site-access.log combined </VirtualHost>
修改后重启Apache:sudo systemctl restart apache2
2. 确保AllowOverride All生效
就算你启用了rewrite模块,如果目录的AllowOverride设为None,.htaccess里的规则根本不会生效。上面的配置里已经加了这个设置,但如果用的是默认的000-default.conf,一定要把对应目录的AllowOverride改成All。
另外再确认rewrite模块真的启用了:sudo a2enmod rewrite,如果之前没开,重启Apache生效。
3. 修复Laravel目录权限
Ubuntu下Apache的运行用户是www-data,必须让它能读写storage和bootstrap/cache目录,不然可能导致路由加载异常:
sudo chown -R www-data:www-data storage bootstrap/cache sudo chmod -R 775 storage bootstrap/cache
4. 清除项目缓存
克隆的项目可能残留了旧环境的缓存,执行下面的命令清空:
php artisan cache:clear php artisan route:clear php artisan config:clear
这能确保新的.env配置和路由规则完全生效。
5. 检查.env的APP_URL
确保APP_URL和你实际访问的域名/IP一致,比如:
APP_URL=http://your-domain-or-ip
虽然这个不直接影响路由,但某些场景下会间接导致URL生成异常。
如果以上步骤都试了还是不行,把.env里的APP_DEBUG改成true,打开调试模式,看看有没有更具体的错误提示——单纯的404太模糊,调试信息能帮你定位到更细节的问题。
内容的提问来源于stack exchange,提问作者Santiago Helguera

