ThinkPHP6.0Nginx配置规则_ThinkPHP6.0Nginx伪静态规则【运维】
ThinkPHP6.0在Nginx中需配置伪静态规则`try_files$uri$uri//index.php?s=$uri&$args`,并将其置于PHP匹配前;同时启用`fastcgi_paramPATH_INFO`;设置网站根目录指向`public/`;注意PHP-FPM运行用户权限,否则配置会静默失败。
先说说最常见的坑——伪静态规则没配好。不配伪静态,index.php 就藏在 URL 里不肯走,所有带路由的请求,比如 /user/list,都会直接给你返回 404。注意,这不是你的代码写错了,是 Nginx 压根没把请求转给 PHP 处理。
为什么 if(!-e $request_filename) 在宝塔能用,在 phpEnv 却报 500?
这是第一个坑,而且很典型。phpEnv 出于安全考虑,默认在 location 块里禁用了 if 指令,强行加上去就会报错:nginx: [emerg] "if" directive is not allowed here。而宝塔默认没这个限制,并且它对 fastcgi_param 和 root 路径的约定更宽松,所以看起来“能用”。
解决方案其实也不复杂:
- phpEnv 必须改用
try_files $uri $uri/ /index.php?s=$uri&$args。注意,&$args不能省,否则像?page=2这类参数就会在转发过程中丢失。 - 这里的
$uri是原始路径,不含 query string,别写成/$1或者$1。开头多了一个斜杠,TP6 的PATH_INFO解析就会出问题。 - 关键一步:这条规则必须放在
location ~ \.php$之前。因为 PHP 文件的匹配优先级更高,如果位置放错了,重写逻辑根本触发不了。
fastcgi_param PATH_INFO 被注释或缺失,导致 “URL pathinfo not supported”
来个更隐蔽的。就算 rewrite 规则写得完全正确,TP6 启动时仍然可能抛出这个错误。注意,这不是 Nginx 报的,是 PHP 层检测到 $_SERVER['PATH_INFO'] 为空或者格式不对,主动终止了。得从两个地方排查:
- 打开
D:/phpEnv/php/php-version/etc/php-fpm.d/www.conf,确认fastcgi_param PATH_INFO $fastcgi_path_info;这行没有被注释掉。如果找不到,手动加在fastcgi_param SCRIPT_FILENAME后面就行。千万别写成$document_uri或者硬编码的字符串。 - 改完之后,必须重启 PHP-FPM,光是重载配置是不生效的。
- 顺手检查一下
php.ini里的disable_functions,看看有没有把scandir禁掉。TP6 启动时会用它扫描app/目录,禁用了就会白屏,而且没有明确报错,排查起来很头疼。
根目录设错了:访问 /index.php 能开,但 /app/config.php 也能直接下载
这是个更严重的安全风险。TP6 强制入口在 public/ 目录,但 phpEnv 新建站点时,默认 root 指向的是项目顶层,比如 D:/phpEnv/www/myapp,而不是 .../myapp/public。
怎么解决?进 phpEnv 主界面,找到网站管理,点「修改」,把「网站根目录」改成完整路径,比如 D:/phpEnv/www/myapp/public。改完之后,必须点「重启 Nginx」+「重启 PHP-FPM」,只点「重载」是不会生效的。验证方法很简单:http://localhost/index.php 应该正常打开,http://localhost/app/config.php 则必须返回 404。如果还能看到文件内容,说明根目录还没切对。
最后必须提一个最容易忽略的点:PATH_INFO 的传递链。Nginx 的 try_files 写对了,fastcgi_param 也启用了,但 PHP-FPM 子进程用户(比如 www)如果没有权限读取 public/ 下的 index.php,依然会静默失败。这时候页面是空白的,error log 里只有一行 Permission denied,很容易被误判成配置问题。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















