页面404主因是框架路由未启用、web服务器未正确传递path_info或s参数、以及服务器配置未生效;需检查thinkphp路由开关、nginx/apache/iis对应配置是否完整启用。

伪静态规则写对了,但页面还是 404?大概率不是规则本身的问题,而是中间某个环节没打通。核心就三点:框架路由得开、Web 服务器得认、PATH_INFO 或 s 参数得传进去。
ThinkPHP 路由开关必须打开
伪静态依赖路由系统解析 URL,如果 url_route_on 关闭,所有重写过来的请求都会被当成非法路径直接拒掉。
- 检查
config/app.php(TP6)或config.php(TP5)中是否设置了'url_route_on' => true - TP6 中还要确认
route/目录下有定义规则,空的route.php文件也会导致路由不生效 - 如果开了
'url_route_must' => true,那每个访问路径都必须在路由表里显式注册,否则一律 404 —— 这是“严格模式”,新手容易踩坑
Nginx 配置里 PATH_INFO 没传,index.php/控制器/方法 就永远 404
很多 Nginx 伪静态规则只写了重写,却漏掉关键的 fastcgi_param PATH_INFO,结果 ThinkPHP 收不到原始路径信息,只能看到 index.php 这一个文件名。
- 在
location ~ \.php$块里必须包含这两行:
fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info;
/index.php?s=xxx 这种传参模式(推荐),那 PATH_INFO 不是必须的,但要确保重写规则里把完整路径塞进了 s 参数Apache 的 .htaccess 文件权限和生效位置经常出错
.htaccess 不是写完就生效,它受 Apache 主配置限制,且对文件位置极其敏感。
- 确认虚拟主机配置里有
AllowOverride All(不是None),否则 .htaccess 完全被忽略 -
.htaccess必须放在项目根目录,也就是和index.php同级;放错一层,规则就失效 - Windows 下编辑的 .htaccess 可能含 BOM 或换行符异常,上传后用 FTP 工具(如 WinSCP)以 UTF-8 无 BOM 格式重存一遍
- TP6 推荐用
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L],注意末尾的PT—— 缺了它,重写后的路径不会继续交给 PHP 处理
IIS 的 web.config 容易漏掉 rewrite 模块检测
IIS 默认不装 URL Rewrite 模块,光配 web.config 是白搭。
- 先去 IIS 管理器 → “模块”里确认有没有
UrlRewriteModule,没有就去微软官网下载安装 -
web.config中的规则必须放在<system.webserver></system.webserver>下,且<rule></rule>的name不能重复 - TP 官方给的 IIS 规则只是骨架,实际要用还得补上匹配逻辑,比如:
<rule name="ThinkPHP" stopprocessing="true"><match url="^(.*)$"></match><conditions logicalgrouping="MatchAll"><add input="{REQUEST_FILENAME}" matchtype="IsFile" negate="true"></add><add input="{REQUEST_FILENAME}" matchtype="IsDirectory" negate="true"></add></conditions><action type="Rewrite" url="index.php?s={R:1}"></action></rule>
真正卡住人的地方,往往不是规则写得有多复杂,而是 PATH_INFO 没传、AllowOverride 没开、或者 url_route_on 还关着 —— 这些点不逐个验证,光调规则等于在黑盒里拧螺丝。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











