隐藏index.php需同时满足服务器正确转发、框架路由接管、入口文件权限正确三者,缺一不可;apache须启用mod_rewrite、allowoverride all并确保.htaccess在public目录且有读取权,nginx须root指向public、location /与~.php$均配try_files及准确script_filename,tp5需开启url_route_on,tp6默认开启但多应用需检查default_app。

隐藏 index.php 不是改个 url_mode 或开个路由开关就能成的事——它本质是 Web 服务器把所有非静态请求,准确、无损地转发给 public/index.php,再由 ThinkPHP 路由层解析。配错任意一环,就会 404、跳回带 index.php 的 URL,或 GET 参数丢失。
Apache 下 .htaccess 不生效?先查这三处
很多人把 ThinkPHP 自带的 .htaccess 往 public/ 里一丢就以为完事,结果访问还是 404 或 403。真正卡住的往往不是规则本身:
- 运行
httpd -M | grep rewrite,没输出说明mod_rewrite没启用,得去httpd.conf取消#LoadModule rewrite_module modules/mod_rewrite.so的注释 -
AllowOverride必须是All,写成FileInfo或None都不行;如果用了虚拟主机,<directory></directory>块里也得显式写上 -
.htaccess必须放在public/目录(即和index.php同级),且 Apache 运行用户(如www-data)有读取权限;Windows 下 phpStudy 等集成环境默认走 FastCGI,此时RewriteRule ^(.*)$ index.php/$1会失效,得换成RewriteRule ^(.*)$ index.php?s=/$1
Nginx location / 和 location ~\.php$ 都得配对写
只配 location / 是最常见错误。Nginx 先匹配 location /,但真正执行 PHP 的是 location ~ \.php$ 块——如果这块没写 try_files $uri =404 或 SCRIPT_FILENAME 指向错误,请求根本进不了 index.php。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
root指令必须指向public/目录,例如root /var/www/myapp/public;写成项目根目录会导致$document_root/index.php找不到 -
location /推荐用:try_files $uri $uri/ /index.php?s=$uri&$args——$args不能省,否则 GET 参数丢失 -
location ~ \.php$必须包含:try_files $uri =404(防止 Nginx 尝试找不存在的 .php 文件) +fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name(路径必须准确) - 删掉所有
fastcgi_split_path_info相关行;TP6 默认走s=参数解析路由,PATH_INFO 会干扰匹配
ThinkPHP 路由开关没开,服务器配再好也没用
框架层不接管请求,Web 服务器转发过去也只是返回原始 PHP 文件内容,不会触发路由逻辑。
- TP5 必须在
config/app.php中显式设置:'url_route_on' => true,且'url_commonly' => false(禁用兼容模式,否则 fallback 到 GET 参数解析) - TP6 默认开启路由,但若项目启用了多应用模式,需确认
default_app是否指向正确入口,否则子应用路由可能未加载 -
pathinfo_depr必须设为'/',且与你实际 URL 分隔符一致;设为空或'.'会导致/user/list这类路由解析失败 -
url_mode只影响 URL 生成逻辑,不决定重写是否生效;它不能让没生效的重写“变有效”
最容易被忽略的是:浏览器缓存了 301 重定向,你以为配置生效了,其实只是旧的跳转还在起作用。测试前清空浏览器缓存,或用 curl -I 直接看响应头。还有,Nginx 改完配置后必须 nginx -t && nginx -s reload,光 systemctl reload nginx 在某些发行版下不保证生效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










