ThinkPHP5.0实现伪静态需三步协同:一、确认url_model=1启用pathinfo模式;二、配置url_html_suffix和路由规则伪装URL;三、配置Apache/Nginx重写规则隐藏index.php。

ThinkPHP5.0 开启 pathinfo 是启用伪静态的前提之一,但要注意:pathinfo 模式和伪静态(URL重写)是两个不同层级的机制,需协同配置才能正常工作。单纯开启 pathinfo 不等于实现了伪静态,而伪静态规则若未正确匹配 pathinfo 解析结果,也会 404。
下面分三块讲清楚怎么做:
一、确认并启用 pathinfo 模式
TP5.0 默认使用 pathinfo 模式(URL_MODEL = 1),无需额外开启,但要确保没被手动改错。
检查 config/app.php 中:
'url_model' => 1,
这个值为 1 表示启用 pathinfo 模式,访问地址形如:http://domain.com/index.php/index/article/detail/id/1
注意:
url_model => 2是 rewrite 模式(即隐藏index.php的纯路径模式),它依赖服务器重写支持,不是 pathinfo 本身;而1才是真正由 PHP 解析PATH_INFO的基础模式。
同时确认 pathinfo_fetch 配置合理(一般默认即可):
'pathinfo_fetch' => ['ORIG_PATH_INFO', 'REDIRECT_PATH_INFO', 'REDIRECT_URL'], 'pathinfo_depr' => '/',
二、配合伪静态:设置后缀与路由规则
pathinfo 模式下,伪静态主要靠 url_html_suffix + 路由定义来“伪装”URL,不依赖服务器重写也能生效(但更推荐配合重写隐藏 index.php)。
在 config/app.php 中设置后缀:
'url_html_suffix' => 'html', // 或 'shtml|xml|pdf'
这样访问 http://domain.com/index/article/detail/id/1.html 会被自动识别,id=1 仍能正确获取,.html 后缀仅作标识,不影响参数解析。
再在 route/route.php 中定义显式路由(可选,但推荐):
use think\Route;
Route::rule('article/:id', 'index/article/detail');
// 访问 /article/1.html → 触发 index/article/detail 控制器方法,$id = 1
三、Web 服务器配置(让 pathinfo + 伪静态真正友好)
即使开了 pathinfo,如果还想隐藏 index.php(比如把 /index.php/article/1.html 变成 /article/1.html),就必须配 Apache 或 Nginx 的重写规则。
-
Apache(.htaccess)
确保开启mod_rewrite,并在入口文件同级目录放.htaccess:<ifmodule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] </ifmodule> -
Nginx(宝塔或手动)
在站点配置中添加(注意匹配index.php入口位置):location / { if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?s=/$1 last; } }⚠️ 若项目结构是 TP5 标准(入口在根目录
index.php),不要用 TP6 的/public/index.php规则,否则会 404。
完成以上三步,就能稳定使用 pathinfo 解析 + 伪静态后缀(如 .html)的组合,既保持 URL 友好,又不破坏参数传递和路由匹配。
不复杂但容易忽略细节。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











