thinkphp 5.1.35 伪静态不生效90%是服务器未将请求交至public/index.php:apache需满足mod_rewrite启用、allowoverride all、.htaccess置于public目录且内容正确;nginx必须在location /中配置try_files $uri $uri/ /index.php?s=$uri&$args,禁用if重写;path_info为空则说明请求未进框架。

ThinkPHP 5.1.35 伪静态不生效,**90% 是 Apache 或 Nginx 没把请求交到 public/index.php,而不是框架写错了路由**。先做最简验证:访问 /user/list 返回 404,但 /index.php/user/list 能正常打开——这就锁定了伪静态层失效,不用查 route.php 内容。
Apache 下 .htaccess 不触发的三个硬性条件
TP5.1.35 默认入口是 public/index.php,.htaccess 必须放在 public/ 目录下,且满足以下全部条件才可能生效:
-
mod_rewrite模块已启用(Linux 执行a2enmod rewrite;WAMP/PHPStudy 在托盘 → Apache → 模块里勾选;phpEnv 进「Apache 设置 → 模块管理」勾选) - 对应虚拟主机的
<directory></directory>块中包含AllowOverride All(不能只写AllowOverride FileInfo,rewrite 规则需要完整覆盖权限) -
.htaccess文件内容正确,且路径匹配当前部署结构(如项目在子目录/myapp/,需加RewriteBase /myapp/)
常见错误:把 .htaccess 放在项目根目录(含 application 的那层),或 AllowOverride 被设为 None —— 此时无论规则多完美,Apache 都直接忽略该文件。
Nginx 中 try_files 写错位置等于没写
TP5.1.35 使用 PATH_INFO 模式解析路由(如 /index.php/user/list 中的 /user/list),Nginx 必须把整个 URI 传给 PHP,不能只传 index.php。关键配置必须落在 location / 块内,且顺序不能错:
- 必须用
try_files $uri $uri/ /index.php?s=$uri&$args;(注意&是 HTML 实体,实际配置写&) - 不能把
try_files写在location ~ \.php$里——那是处理 PHP 文件的分支,不是接管所有路由的入口 - 若站点运行目录设为
/public,而root指向的是项目根目录,则需把 fallback 改成/public/index.php?s=$uri&$args;
旧式写法 if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; } 在较新 Nginx 版本中易触发 rewrite or internal redirection cycle 错误,应弃用。
PATH_INFO 为空?说明请求根本没进框架
在 public/index.php 顶部加一行:var_dump($_SERVER['PATH_INFO']); die;,然后访问 /index/index:
- 输出类似
/index/index→ 说明伪静态和 PATH_INFO 传递都正常,问题可能出在路由定义或url_route_on关闭 - 输出空字符串或
NULL→ 请求被 Web 服务器当成静态资源处理了,压根没走到 ThinkPHP 入口,此时回退检查 Apache/Nginx 配置
注意:TP5.1.35 默认开启路由('url_route_on' => true),但如果环境变量覆盖了该配置(比如 APP_ENV=testing 且测试环境配置里关了路由),也会静默失效。临时加 var_dump(config('app.url_route_on')); 可确认实际值。
真正卡住的地方往往不是规则本身,而是 AllowOverride 没开、.htaccess 放错目录、Nginx 的 try_files 落在了错误的 location 块里,或者运行目录和物理路径对不上。验证时别只测首页,一定要用一个明显不存在的路径(比如 /xyzabc)看返回的是 Nginx 原生 404 还是 ThinkPHP 的调试页——前者说明 Web 服务器根本没转发,后者才说明框架已接管。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











