thinkphp 8.0 部署后404主因是nginx未将请求交由public/index.php处理,须确保root指向public目录、location/中配置try_files $uri $uri/ /index.php?s=$uri&$args、php块禁用fastcgi_split_path_info且传参完整。

ThinkPHP 8.0 在 macOS 上部署后访问 /user/profile 直接返回 404,不是代码写错了,而是 Nginx 根本没把请求交给 public/index.php 处理——try_files 规则没配对、root 指向错目录、或 PHP 参数漏传,三者任一缺失都会让路由系统完全失效。
确认项目结构与 Nginx 运行权限
打开终端,执行 ls -la /opt/www/myapp/,确保目录下存在 public/ 子目录,且其中包含 index.php;若用 Homebrew 安装的 Nginx,默认以 _www 用户运行,需执行 sudo chown -R _www:_www /opt/www/myapp,否则会因权限不足无法读取 public/ 下的文件。
【必须执行】 确保 public/ 是 Web 可访问的唯一入口目录,不要把整个 ThinkPHP 项目根目录设为 root。
配置 server 块:根目录部署(推荐)
编辑 Nginx 配置文件(如 /usr/local/etc/nginx/servers/myapp.conf),在 server 块内写入:
第一步:设置 root 指向 public 目录,末尾不加斜杠:root /opt/www/myapp/public;
第二步:添加 location / 块,使用原子级 try_files 兜底:
location / {<br> try_files $uri $uri/ /index.php?s=$uri&$args;<br>}
第三步:嵌套 location ~ \.php$ 块,确保参数完整:
location ~ \.php$ {<br> include fastcgi_params;<br> fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;<br> fastcgi_param QUERY_STRING $query_string;<br> fastcgi_pass 127.0.0.1:9000;<br>}
注意:fastcgi_split_path_info 必须删除或注释掉——TP8 默认用 s= 参数解析路由,启用该指令会导致 PATH_INFO 错乱,使 /user/list 解析成空控制器。
子目录部署:比如 https://localhost/myapp/
方法一:改 Nginx location + 调整兜底路径
将 location / 改为 location /myapp/,同时把 try_files 中的兜底目标改为 /myapp/index.php?s=$uri&$args;root 仍指向 /opt/www/myapp/public,但必须配合 alias 写法——【关键区别】 此时不能用 root,要改用:
location /myapp/ {<br> alias /opt/www/myapp/public/;<br> try_files $uri $uri/ /myapp/index.php?s=$uri&$args;<br>}
方法二:不改 Nginx,改框架配置(更轻量)
在 public/index.php 顶部插入:$_SERVER['SCRIPT_NAME'] = '/myapp/index.php';
并在 config/app.php 中设置:
'app_host' => 'localhost',<br>'app_subdomain_deploy' => true,<br>'url_common_param' => false
此时 Nginx 仍可用标准根目录配置,无需修改
location 块。
验证与热重载
在终端执行 sudo nginx -t,确认输出 nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful;
执行 sudo nginx -s reload 重载配置;
访问 http://localhost/index/index,若页面显示 “Hello, ThinkPHP” 即表示入口已通;再访问 http://localhost/user/profile,不再出现 404,说明伪静态生效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











