ThinkPHP路由失效主因有三:Apache下.htaccess未启用或配置错误;Nginx下重写规则缺失或PATH_INFO未正确传递;TP6在APP_DEBUG=false时route_cache未生成或损坏。

Apache环境下ThinkPHP路由失效:检查.htaccess是否启用及内容是否匹配
ThinkPHP默认依赖.htaccess实现URL重写,迁移后若Apache未开启mod_rewrite或AllowOverride被设为None,路由直接退化为index.php?/xxx形式,pathinfo模式完全不生效。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 确认
mod_rewrite已加载:apache2ctl -M | grep rewrite(Linux)或查看httpd.conf中LoadModule rewrite_module modules/mod_rewrite.so是否取消注释 - 检查站点配置中
Directory段是否允许覆盖:AllowOverride All(不能是None或FileInfo以外的值) - 核对项目根目录下的
.htaccess是否完整存在且内容为ThinkPHP官方标准版本(尤其注意RewriteBase /是否需改为子目录路径,如部署在/tp5/下应改为RewriteBase /tp5/)
Nginx环境下ThinkPHP路由失效:确认location块中try_files或rewrite规则正确
Nginx不支持.htaccess,必须在server配置中显式声明重写逻辑。常见错误是直接复制Apache规则、遗漏index.php入口或未处理PATH_INFO变量。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 确保
location /或location ~ \.php$之外,有针对ThinkPHP的通用重写:location / { try_files $uri $uri/ /index.php?$query_string; } - 若使用
pathinfo模式(如http://site.com/index.php/user/login),需额外在fastcgi_params中设置:fastcgi_param PATH_INFO $fastcgi_path_info;,并确保location ~ \.php正则能捕获pathinfo部分(例如用location ~ ^(.+\.php)(/.*)?$) - 避免把
index.php写死在root路径下——若项目部署在子目录(如/var/www/html/myapp),root应指向该目录,而非上层
ThinkPHP 6+ 路由失效还可能因APP_DEBUG关闭且route_cache未生成
TP6默认在APP_DEBUG = false时启用路由缓存,迁移后若runtime/route目录不可写或缓存文件损坏,会导致所有路由404,但index.php?s=xxx仍可访问。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 临时将
APP_DEBUG设为true,看路由是否立即恢复——若恢复,说明是缓存问题 - 清空
runtime/route/目录,并确保该目录有写权限(Web服务器用户可写) - 手动执行缓存生成命令:
php think route:cache(需命令行环境可用) - 检查
config/route.php中是否误删了return [];末尾的返回语句(导致路由注册中断)
伪静态生效但部分路由404:重点排查Route::rule()中的正则约束与域名绑定
伪静态整体通了,但个别路由(尤其是带参数或闭包定义的)报404,往往不是重写问题,而是路由注册阶段就失败了。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 检查
Route::rule()第三个参数(正则约束)是否写错,比如'id' => '\d+'写成'id' => '\d'(少+号),导致匹配失败 - 确认
Route::domain()或Route::group()是否绑定了旧域名或路径前缀,迁移后域名变了但路由分组没同步更新 - 用
php think route:list命令输出当前已注册路由表,比对请求URL是否在列表中、HTTP方法是否匹配(如定义了POST却用GET访问)
fastcgi_split_path_info配置和TP6的route_cache状态,这两处不报错、不提示,只静默失效。


















