You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Debian环境下Laravel+Nginx路由调优:基础路由返回404问题

解决Laravel 5.4 + Nginx路由404问题

我之前调试Laravel+Nginx的时候也碰到过一模一样的问题,核心原因基本都是Nginx没有正确把请求转交给Laravel的入口文件处理,或者root路径配置错了。给你一步步排查和解决的方案:

1. 修正Nginx的Root路径

你的Nginx配置里root /srv/www;指向的是网站根目录,但Laravel的入口文件在project/public下,所以需要把root路径调整为Laravel项目的public目录:

root /srv/www/project/public;

这样Nginx才能正确找到Laravel的index.php入口文件,后续访问也不需要在URL里加project/public了。

2. 配置正确的请求重写规则

location /块里,必须添加try_files指令,让Nginx把不存在的文件/路径转发给index.php处理(也就是交给Laravel路由解析):

location / {
    # 优先尝试静态文件,不存在则转交给Laravel入口
    try_files $uri $uri/ /index.php?$query_string;
}

这一步是关键——没有这个规则,Nginx会直接对未匹配到静态文件的请求返回404,不会把请求传给Laravel的路由系统。

3. 确保PHP-FPM配置正确

还要检查Nginx处理PHP的配置块,确保能正确解析PHP文件,示例配置如下:

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    # 注意:这里的PHP-FPM地址要和你系统里的版本匹配,Laravel5.4最低支持PHP7.0
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    # 必须配置这个参数,让PHP-FPM能找到正确的脚本文件
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

4. 重启服务并清除Laravel缓存

完成配置修改后,重启Nginx让配置生效:

sudo systemctl restart nginx

然后进入Laravel项目目录,清除路由和缓存,避免旧缓存干扰:

cd /srv/www/project
php artisan route:clear
php artisan cache:clear

5. 检查文件权限

最后确保Laravel的存储目录有正确的权限,避免权限问题导致的隐性异常:

sudo chown -R www-data:www-data /srv/www/project/storage /srv/www/project/bootstrap/cache
sudo chmod -R 755 /srv/www/project/storage /srv/www/project/bootstrap/cache

把这些步骤做完后,再访问http://localhost/foo,应该就能正常返回"Hello World"了。

内容的提问来源于stack exchange,提问作者MyNick

火山引擎 最新活动