Nginx服务器下Laravel 5.5路由异常:访问/about报404错误求助
解决Laravel 5.5在Nginx下路由404的问题
这个问题我之前帮不少开发者解决过,核心原因就是Nginx默认会直接去寻找请求路径对应的文件/目录,而Laravel的路由是靠public/index.php统一处理的,所以得调整Nginx配置,让所有非静态文件的请求都转发给Laravel的入口文件。
第一步:修改Nginx站点配置
找到你的Nginx站点配置文件,通常在/etc/nginx/sites-available/目录下(比如默认的default文件),如果是直接在nginx.conf里配置的server块,直接修改对应部分即可。
把你的server块调整成类似下面的样子:
server { listen 80; server_name localhost; # 指向Laravel项目的public目录,根据你的实际路径修改 root /var/www/my_project/public; index index.php index.html index.htm; location / { # 关键规则:先找静态文件,找不到就把请求转发给index.php处理 try_files $uri $uri/ /index.php?$query_string; } # 处理PHP请求,确保PHP-FPM地址正确(根据你的PHP版本调整) location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; # 示例为PHP7.2的unix套接字,若用TCP方式则写127.0.0.1:9000 fastcgi_pass unix:/run/php/php7.2-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # 禁止访问隐藏文件,可选配置 location ~ /\.ht { deny all; } }
注意:
root路径要改成你实际的Laravel项目public目录路径,比如项目在/home/your_user/my_project,就写/home/your_user/my_project/publicfastcgi_pass的地址要匹配你的PHP-FPM配置,比如PHP7.4可能是unix:/run/php/php7.4-fpm.sock
第二步:验证配置并重启Nginx
修改完配置后,先测试配置是否合法:
sudo nginx -t
如果输出nginx: configuration file /etc/nginx/nginx.conf test is successful,说明配置没问题,接着重启Nginx:
sudo systemctl restart nginx
第三步:额外排查点
如果还是无法访问,再检查下面几个细节:
- 确认Laravel路由定义正确:打开
routes/web.php,确保存在类似Route::get('/about', function () { return view('about'); });的路由代码 - 清除Laravel路由缓存:执行
php artisan route:clear,避免缓存的旧路由干扰 - 检查项目权限:确保
storage和bootstrap/cache目录对Web服务器用户(通常是www-data)有读写权限,可执行sudo chown -R www-data:www-data /var/www/my_project/storage /var/www/my_project/bootstrap/cache
调整完成后,访问http://localhost/my_project/public/about应该就能正常加载了。
内容的提问来源于stack exchange,提问作者Ziaur Rahman
相关产品推荐
相关产品推荐

