当前位置: 首页 > article >正文

ThinkPHP6(TP6)控制器404问题排查与Nginx伪静态配置指南

1. 为什么你的TP6控制器总是404最近帮朋友排查一个ThinkPHP6项目明明控制器写得没问题路由也配置了但一访问就蹦出个404页面。这种问题在新手部署TP6时特别常见尤其是用Nginx服务器的环境。我自己第一次用TP6时也踩过这个坑折腾了半天才发现是Nginx的PathInfo模式没开。简单来说ThinkPHP6默认使用PathInfo模式识别路由比如/index.php/blog/show这种URL结构。但Nginx默认不认识这种格式会把整个路径当作真实文件路径去查找自然就找不到对应的物理文件。这就像你拿着中文菜单去英文餐厅点菜服务员根本看不懂你要什么。2. 快速验证是不是PathInfo问题在动手改配置前先用这两个方法确认问题方法一强制带index.php访问在URL里显式加上index.php比如http://yoursite.com/index.php/blog/show如果能正常访问那基本可以确定是PathInfo解析问题。方法二查看路由缓存运行命令php think route:list确认你的路由确实已经注册。有时候404是因为路由根本没生效和服务器配置无关。3. Nginx伪静态配置终极方案3.1 基础版配置在Nginx的server配置块里加入这段万能代码location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s$1 last; break; } }这个规则的意思是如果请求的文件不存在就把整个URL作为参数传给index.php。比如访问/blog/show会被重写为/index.php?s/blog/show这样TP6就能正常解析了。3.2 强化版配置推荐基础版有个小缺陷会把所有404请求都转给index.php包括图片、CSS等静态资源。更专业的写法应该是location / { try_files $uri $uri/ /index.php?s$uri; }这个配置会先尝试访问真实文件找不到再交给TP6处理。性能更好也更安全。3.3 带PATH_INFO的高级配置有些特殊场景需要支持标准的PATH_INFO模式location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.?\.php)(/.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass unix:/run/php/php8.1-fpm.sock; include fastcgi_params; }这种配置适合需要兼容老项目的情况不过对TP6来说前两种方案更简单直接。4. 不同环境下的实操指南4.1 宝塔面板用户进入网站设置 → 伪静态选择ThinkPHP规则模板或者直接粘贴我们上面的强化版配置记得重启Nginx服务宝塔有个坑有时候修改配置后需要清除浏览器缓存才能生效。我遇到过好几次改完配置不生效清缓存就好了。4.2 PHPStudy用户打开网站 → 管理 → 伪静态把配置代码粘贴进去保存后重启服务注意PHPStudy有多个版本Windows版和Linux版的Nginx配置路径可能不同。如果修改不生效建议直接找到nginx.conf手动编辑。4.3 原生Nginx环境直接编辑站点配置文件通常在/etc/nginx/sites-available/your_site.conf添加伪静态规则后测试配置并重启nginx -t # 测试配置 systemctl restart nginx5. 其他可能引发404的原因不是所有404都是伪静态的问题排查时要注意这些情况路由缓存没更新TP6有路由缓存机制修改路由后要清理php think optimize:route控制器命名空间错误新手常犯的错是命名空间写错比如// 错误写法多了一层Controller namespace app\controller\Controller; // 正确写法 namespace app\controller;URL大小写问题Linux系统是严格区分大小写的。如果你的控制器是BlogController访问/blog可以但/Blog就会404。可以在config/app.php里关闭严格模式route_rule_merge true, route_rule_config [ route_complete_match false, ]6. 性能优化小技巧伪静态配置好后还可以做这些优化开启opcache在php.ini中加入opcache.enable1 opcache.enable_cli1 opcache.memory_consumption128 opcache.max_accelerated_files10000配置Nginx缓存对静态资源添加缓存头location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; add_header Cache-Control public, no-transform; }禁用favicon.ico日志避免无谓的日志记录location /favicon.ico { log_not_found off; access_log off; }7. 常见问题答疑Q配置改了还是不生效A按这个顺序检查确认修改的是正确的nginx.conf可以用nginx -T查看加载的配置检查是否有语法错误nginx -t彻底重启Nginxsystemctl restart nginx清除浏览器缓存或用隐身模式访问Q本地正常但服务器404A可能是PHP-FPM配置问题检查fastcgi_pass unix:/run/php/php-fpm.sock; # 确保这个路径正确Q只有首页能访问A可能是重写规则被覆盖了检查是否有其他location块干扰。可以用rewrite_log on;开启重写日志调试。8. 进阶理解背后的原理为什么TP6默认要用PathInfo这要从MVC框架的路由原理说起。传统方式是通过?ccontrolleraaction这样的查询参数来路由但这种URL既不美观也不SEO友好。PathInfo模式把路由信息放在URL路径中看起来更自然。Nginx默认不处理PathInfo是因为安全考虑。如果随意把路径当作参数传递可能会导致目录遍历等安全问题。所以需要我们明确告诉Nginx哪些URL需要特殊处理。ThinkPHP的路由系统其实非常灵活除了PathInfo还支持多种模式混合模式适合渐进式开发强制路由更安全注解路由代码即文档理解这些底层机制后再遇到路由问题就能快速定位了。比如如果你切换到强制路由模式就需要明确定义所有路由规则否则就会404。

相关文章:

ThinkPHP6(TP6)控制器404问题排查与Nginx伪静态配置指南

1. 为什么你的TP6控制器总是404? 最近帮朋友排查一个ThinkPHP6项目,明明控制器写得没问题,路由也配置了,但一访问就蹦出个404页面。这种问题在新手部署TP6时特别常见,尤其是用Nginx服务器的环境。我自己第一次用TP6时也…...

保姆级教程:用Python+OpenCV搞定汽车360全景拼接(附C++移植思路)

从零构建汽车360全景系统:PythonOpenCV实战与C工程化指南 当你第一次坐上驾驶座,启动车辆时,中控屏上突然展现出车辆周围无死角的鸟瞰视图——这就是现代汽车360全景系统带来的神奇体验。作为提升驾驶安全性和便利性的关键技术,它…...

别再自己写驱动了!用STM32CubeMX HAL库5分钟搞定TM1637数码管显示

5分钟用STM32CubeMX HAL库驱动TM1637数码管:告别底层代码的终极方案 每次面对数码管驱动时,那些繁琐的GPIO初始化、时序控制和寄存器配置是否让你头疼不已?传统开发方式需要手动编写大量底层代码,不仅耗时耗力,还容易因…...

微信公众号模板消息推送实战:从配置到代码实现(PHP版)

微信公众号模板消息推送实战:PHP开发全流程指南 在移动互联网时代,微信公众号已成为企业与用户沟通的重要桥梁。模板消息作为微信生态中的关键功能,能够实现精准、高效的信息触达。本文将带领PHP开发者从零开始,完整掌握模板消息推…...

Deep-Live-Cam架构深度解析:构建实时AI换脸系统的技术实现与优化策略

Deep-Live-Cam架构深度解析:构建实时AI换脸系统的技术实现与优化策略 【免费下载链接】Deep-Live-Cam real time face swap and one-click video deepfake with only a single image 项目地址: https://gitcode.com/GitHub_Trending/de/Deep-Live-Cam 在数字…...

使用Alpine配置WSL ssh门户

1. 哑铃图是什么? 哑铃图(Dumbbell Plot),有时也称为DNA图或杠铃图,是一种用于比较两个相关数据点的可视化图表。 它源于人们对更有效数据比较方式的持续探索。 在传统的时间序列比较中,我们通常使用两条折…...

如何快速解决AMD Ryzen系统调试问题:SMUDebugTool完整使用指南

如何快速解决AMD Ryzen系统调试问题:SMUDebugTool完整使用指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: ht…...

GitHub开源项目日报 · 2026年3月30日 · 微软开源VibeVoice语音模型登顶,Claude Code生态项目持续火爆

本期榜单涵盖了语音AI、Claude Code辅助编程工具、换脸技术、金融数据平台、在线教育、数据可视化等多个领域的开源项目。超过10000星以上的项目有9个,其中freeCodeCamp以近44万星稳居榜首,Apache Superset、OpenBB、Deep-Live-Cam等项目也获得广泛关注。微软开源的VibeVoice…...

NoSleep防休眠工具:系统唤醒与持续运行的高效解决方案

NoSleep防休眠工具:系统唤醒与持续运行的高效解决方案 【免费下载链接】NoSleep Lightweight Windows utility to prevent screen locking 项目地址: https://gitcode.com/gh_mirrors/nos/NoSleep 在数字化工作环境中,电脑意外休眠往往导致工作中…...

基于Dify的AI数据采集与整理工具设计与实现

基于Dify的AI数据采集与整理工具设计与实现 1. 引言 1.1 背景与需求 在信息爆炸的时代,新闻网站、人物资料库等不断产生海量数据。传统手动采集整理方式效率低下,难以满足实时性、准确性和规模化的要求。本工具旨在利用Dify平台的强大编排能力,结合AI大语言模型(LLM)和…...

「码动四季·开源同行」go语言:统一认证与授权如何保障服务安全

认证与授权对于当前的互联网应用是非常重要的基础功能:认证用于验证当前用户的身份,而授权意味着用户在认证成功后,会被系统授予访问系统资源的权限。只有具备相应身份和权限的人才能访问系统中的相应资源,比如在购物网站中你只能…...

DVB-S系统设计:从理论到FPGA实现的完整指南

1. DVB-S系统概述:卫星数字电视的核心技术 DVB-S(Digital Video Broadcasting - Satellite)是卫星数字电视广播的国际标准,它定义了从信号编码、调制到传输的完整技术规范。我第一次接触DVB-S系统是在2015年参与一个卫星接收机项目…...

MXene基单原子催化剂在电催化CO2还原中的电子结构调控与性能优化

1. MXene基单原子催化剂为何能成为CO2还原的"黑马"? 在碳中和背景下,电催化CO2还原技术就像一位"化学魔术师",能把温室气体变废为宝。而MXene材料凭借其独特的层状结构和导电性,正成为这场魔术表演的明星道具…...

单机变联机:Nucleus Co-Op如何让你的电脑实现4人同屏游戏

单机变联机:Nucleus Co-Op如何让你的电脑实现4人同屏游戏 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 你是否曾想过,用一…...

为什么90%的词库转换都会失败?输入法词库迁移的终极解决方案:全方位指南

为什么90%的词库转换都会失败?输入法词库迁移的终极解决方案:全方位指南 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 在数字化时代&#x…...

解锁5大跨平台无线控制能力:QtScrcpy全方位使用指南

解锁5大跨平台无线控制能力:QtScrcpy全方位使用指南 【免费下载链接】QtScrcpy Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrcpy …...

springboot+vue基于web的高校学生宿舍报修系统

目录同行可拿货,招校园代理 ,本人源头供货商高校学生宿舍报修系统功能分析(SpringBootVue)系统角色划分核心功能模块学生端功能维修端功能管理端功能系统管理功能技术实现要点扩展功能建议数据安全考虑项目技术支持源码获取详细视频演示 :文章…...

颠覆级植物大战僵尸修改工具:一站式资源管理与战局掌控解决方案

颠覆级植物大战僵尸修改工具:一站式资源管理与战局掌控解决方案 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 还在为植物大战僵尸中阳光不足而焦虑吗?面对海量僵尸浪潮却束…...

5分钟掌握ViGEmBus:Windows虚拟手柄驱动的完整指南

5分钟掌握ViGEmBus:Windows虚拟手柄驱动的完整指南 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus ViGEmBus是一款专业的Windows内核级虚拟游戏手…...

广告发光字全科普

广告发光字全科普:从原理到类型,一篇看懂门头招牌的发光逻辑走在城市街头,从连锁品牌门头到商场导视、楼宇标识,随处可见夜晚自动亮起的广告发光字。它早已不是简单的霓虹灯,而是融合材料、工艺、光学与工程的成熟标识…...

ruoyi-vue-pro源码部署实战:如何选择稳定版本并快速搭建开发环境

RuoYi-Vue-Pro 稳定版部署指南:从版本选择到开发环境搭建全解析 第一次接触 RuoYi-Vue-Pro 这个 Java 快速开发框架时,我像大多数开发者一样直接克隆了 master 分支,结果编译阶段就遭遇了各种依赖冲突和接口报错。后来才发现,这个…...

系统托盘管理效率革命:让你的Windows桌面空间重获自由

系统托盘管理效率革命:让你的Windows桌面空间重获自由 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 当你的任务栏堆叠着12个窗口图标,每点击一次…...

CTF实战:手把手教你用fastcoll工具复现MD5碰撞攻击(附Python验证脚本)

CTF实战:手把手教你用fastcoll工具复现MD5碰撞攻击(附Python验证脚本) 在网络安全竞赛和渗透测试中,MD5碰撞攻击是一个经典且实用的技术点。本文将带你从零开始,完整复现MD5碰撞攻击的全过程,包括工具使用、…...

WinForm项目中的并发控制

引言 在编写WinForm应用程序时,处理并发问题是一个常见的挑战,尤其是在涉及数据库操作的场景中。本文将讨论如何在C#的WinForm项目中,通过SQL数据库的操作来避免并发问题,并介绍一种使用原子操作的解决方案。 问题描述 假设有一个WinForm项目,其中包含一个功能模块,需…...

Java应用内存泄漏排查实战:MAT工具从入门到精通(附常见问题解析)

Java应用内存泄漏排查实战:MAT工具从入门到精通 引言:为什么我们需要关注内存泄漏? 记得去年我们团队接手的一个电商项目吗?上线三个月后,系统开始频繁出现OOM(OutOfMemoryError)错误。每次重启…...

深入解析Python中ort.InferenceSession的底层实现与性能优化

1. 揭开ort.InferenceSession的神秘面纱 第一次接触ort.InferenceSession时,我完全被它的性能震惊了。作为一个用Python加载ONNX模型的标准入口,它看起来就是个普通的类实例化操作,但背后却隐藏着C和Python的完美协作。这种设计让开发者既能享…...

RIFE帧插值技术:视频增强领域的智能插帧解决方案

RIFE帧插值技术:视频增强领域的智能插帧解决方案 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/video2x …...

用ZYNQ PS-SPI给Flash测个速:华邦W25Q80在25MHz时钟下的真实读写性能报告

ZYNQ PS-SPI Flash性能深度评测:华邦W25Q80在25MHz时钟下的极限挖掘 当我们需要在嵌入式系统中选择一款Flash存储器时,数据手册上的理论参数往往无法反映真实应用场景下的性能表现。本文将基于Xilinx ZYNQ平台的PS-SPI接口,对华邦W25Q80 Flas…...

SenseVoice-small实战教程:导出SRT/VTT字幕文件用于Premiere剪辑

SenseVoice-small实战教程:导出SRT/VTT字幕文件用于Premiere剪辑 你是不是经常遇到这样的烦恼?录了一段视频,或者拿到一段会议录音,想要给它配上精准的字幕,却发现自己要花几个小时去听写、校对、打时间轴&#xff1f…...

3步搞定B站4K视频下载:开源工具bilibili-downloader终极指南

3步搞定B站4K视频下载:开源工具bilibili-downloader终极指南 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 想要免费下载…...