thinkphp 5.0.15 伪静态需服务器规则与框架配置协同生效:.htaccess 必放 public/ 目录,apache 启用 rewrite_module 并设 allowoverride all,nginx 配 try_files 和 fastcgi_param path_info,且框架中 url_route_on、pathinfo_depr 等三项配置必须全开。

ThinkPHP 5.0.15 伪静态配置不是单个文件能搞定的,必须同时改服务器规则 + 框架配置,漏掉任一环都会 404 或仍带 index.php。
Apache 下 .htaccess 放错位置是最高频失败原因
TP5.0.15 默认入口文件是 public/index.php,所以 .htaccess 必须放在 public/ 目录下,而不是项目根目录(含 application/ 那层)。
- 检查 Apache 是否启用
rewrite_module:Linux 执行a2enmod rewrite,Windows 在 phpEnv 或 XAMPP 的 Apache 模块管理中勾选 - 确认虚拟主机配置中对应
public/目录的<directory></directory>块含AllowOverride All,不是None -
.htaccess内容用这个最稳版本(兼容 PATH_INFO):
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
如果项目部署在子目录(如 http://localhost/myapp/),需加一行:RewriteBase /myapp/
Nginx 中 try_files 规则要配在 location / 里,且不能漏 fastcgi_param
Nginx 不读 .htaccess,所有重写必须写进站点 server 块。只加 try_files 不够,PATH_INFO 解析失败会导致路由全崩。
- 在
location / { }内写:
location / {
try_files $uri $uri/ /index.php?s=$uri&$args;
}
- 关键:确保
location ~ \.php$ { }块里有这行(尤其宝塔或手动编译 Nginx 时容易漏):
fastcgi_param PATH_INFO $fastcgi_path_info;
- 改完必须执行
nginx -t && nginx -s reload,光重启服务不生效
框架内 config/app.php 的三个开关必须全开
服务器转发对了,但框架没接住,照样 404。TP5.0.15 的路由开关分散在多个地方,缺一不可:
-
'url_route_on' => true:开启 URL 路由(必须) -
'pathinfo_depr' => '/':匹配 Apache/Nginx 传来的路径分隔符,别写成'-'或'.' -
'url_html_suffix' => 'html':可选,但设为空字符串''时会把后缀当参数,比如/article/1.html的id变成1.html
注意:TP5.0.15 默认不强制校验路由,所以 'url_route_must' => false 是安全的;设为 true 后所有访问都必须提前定义在 route/route.php 里,新手容易踩坑。
调试时别信浏览器地址栏,用 $_SERVER['PATH_INFO'] 看真实值
伪静态是否真正生效,不能只看 URL 是否少了 index.php —— 很多时候只是前端跳转或 JS 拼接的假象。
- 在控制器里加一行:
dump($_SERVER['PATH_INFO']); - 正常情况应输出类似
/index/index或/article/123;如果为空或报错,说明服务器根本没把路径传进来 - 此时优先查
fastcgi_param PATH_INFO(Nginx)或RewriteRule的[PT]标志(Apache)是否缺失
最易被忽略的是:本地用 PHP 内置服务器(php -S)跑 TP5.0.15 时,它根本不支持 PATH_INFO,必须配 router.php 才能模拟,直接访问会永远卡在入口文件。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











