必须将nginx的root指令指向thinkphp项目public目录的绝对路径,否则会导致404或“no input file specified”错误;再配置location /和location ~.php$双try_files规则(含?s=$uri&$args),禁用fastcgi_split_path_info,并确保script_filename和query_string正确传递。

刚下载完ThinkPHP6,想让项目跑起来且URL里不带index.php?必须先配好虚拟主机指向public目录,再加服务器重写规则,否则访问直接404或“No input file specified”。
确认并设置Nginx虚拟主机根目录
这一步是所有后续操作的前提,错一步全盘失效。root指令必须指向项目public目录的绝对路径,不是项目根目录,也不是public的上级目录。
打开你的Nginx站点配置文件(如phpEnv中为C:/phpEnv/nginx/vhost/your-site.conf),在server块内找到root行。
将root C:/www/myapp;改为root C:/www/myapp/public;(Windows路径用正斜杠)。
【root必须指向public目录,否则SCRIPT_FILENAME拼接错误,必然报“No input file specified”】
同时确认index指令存在且index.php排第一:index index.php index.html index.htm;
保存后,必须通过控制面板点击“重启Nginx”,不能只执行nginx -s reload。
配置Nginx伪静态隐藏index.php
推荐使用try_files方案,它比rewrite更安全,不会触发隐式跳转,也避免了PATH_INFO干扰问题。
方法一:基础双fallback(适用于TP6默认s=参数路由)
在server块内添加或修改location /块:
location / { try_files $uri $uri/ /index.php?s=$uri&$args; }
方法二:完整PHP处理块(必须配套使用)
在同一个server块内,确保有以下location ~ \.php$配置:
location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
【删除fastcgi_split_path_info相关行,TP6用s=参数解析路由,PATH_INFO会干扰】
ThinkPHP 8.1.0 正式发布,深度优化路由与验证机制,完美兼容 PHP 8.4。本版本修复了数组路由配置异常,新增枚举值校验与高级数组验证功能,支持路由分类默认处理。作为高性能 PHP 框架的最新迭代,它延续了简洁实用的设计原则,提供更稳定的底层架构与更流畅的开发体验,助力开发者快速构建现代化 Web 应用与企业级系统。
注意:fastcgi_params文件中必须包含fastcgi_param QUERY_STRING $query_string;,否则GET参数丢失。
Apache下配置.htaccess与服务端启用
第一步:启用mod_rewrite模块
打开Apache的httpd.conf,取消注释这一行:LoadModule rewrite_module modules/mod_rewrite.so
第二步:允许.htaccess覆盖
找到
第三步:把.htaccess文件放在public目录下(不是项目根目录!)
内容如下:
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
注意:RewriteBase不用设,除非你部署在子目录(如/example/),此时需加一行RewriteBase /example/
验证ThinkPHP自身路由是否开启
打开项目根目录下的config/app.php,检查以下三项:
'url_route_on' => true,
'pathinfo_depr' => '/',
'url_html_suffix' => '',
TP6默认已开启url_route_on,但若你改过配置,务必确认为true。
如果使用子目录部署(如http://localhost/mytp6/),还需在public/index.php中检查APP_PATH定义是否正确,避免路由解析路径偏移。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










