Laravel路由404的根本原因是请求未进入public/index.php入口,必须将网站根目录设为public子目录,并在Nginx中配置try_files $uri $uri/ /index.php?$query_string;Apache则需确保.htaccess存在且AllowOverride All生效。

部署Laravel项目到Nginx服务器后首页能打开但所有路由都报404,说明请求根本没进public/index.php入口,必须手动配置正确的伪静态规则才能激活Laravel路由系统。
确认网站根目录指向public子目录
这一步是前提,不满足则后续所有配置无效。Nginx的root指令必须明确指向Laravel项目的public目录,例如/var/www/myapp/public或D:\laragon\www\myapp\public。
在宝塔面板中:网站→设置→网站目录→运行目录选“/public”;在Laragon中:右键站点→Edit Site→Document Root填D:\laragon\www\myapp\public(注意结尾不加斜杠,更不能填index.php)。
【根目录若指向项目根而非public,.env文件将直接可访问,且PHP自动加载器无法初始化,必然导致白屏或500】
验证方式:访问http://your-domain/.env应返回403或404;访问http://your-domain应显示Laravel欢迎页。
配置Nginx伪静态核心规则
方法一:宝塔面板一键启用(推荐新手)
网站→设置→伪静态→下拉选择“Laravel5”→保存。该选项自动生成标准try_files规则,无需手动编辑。
方法二:手动修改Nginx配置文件(推荐生产环境)
进入站点配置文件(宝塔在「配置文件」页,Laragon在「Edit Nginx Conf」),定位到location / { }区块,将其内容完整替换为:
try_files $uri $uri/ /index.php?$query_string;
注意:这一行必须放在location ~ \.php$ { }块之前;$query_string前是?不是&;前后空格不可省略;删掉所有if (!-e $request_filename)或rewrite语句——它们与try_files冲突且已被Laravel 9+弃用。
检查并关闭open_basedir限制
第一步:进入宝塔或Laragon的PHP设置页面,找到「open_basedir」输入框,将其内容完全清空(留空,不是填none或0)。
第二步:关闭「防跨站攻击」开关。部分版本需同时操作两项,否则storage/logs、bootstrap/cache无法写入,导致php artisan config:cache失败、日志空白、队列启动异常。
第三步:检查public/.user.ini是否存在。如有,它可能继承父级限制,需删除或确保其内容不含open_basedir相关字段。
改完后务必重启Nginx(或Apache)服务,配置才生效。


















