thinkphp伪静态需服务器与框架协同:apache用含pt标志的.htaccess置于public目录;nginx用if+rewrite规则指向/public/index.php并设root为public;框架内必须开启url_route_on、pathinfo_depr='/'且url_html_suffix=''。

ThinkPHP伪静态不是改几行PHP代码就能生效的事,核心是服务器把请求正确转给index.php,再由框架路由解析。光配框架不配服务器,URL里永远带着index.php;光配服务器不启路由,照样404。
Apache下用.htaccess隐藏入口文件
适用于本地WAMP、XAMPP或支持.htaccess的Linux主机。
- 确认
mod_rewrite已启用:Linux执行sudo a2enmod rewrite,Windows在httpd.conf中取消#LoadModule rewrite_module modules/mod_rewrite.so前的注释 -
.htaccess必须放在public/目录(TP6/8默认入口目录),不能放错位置 - 文件内容写标准规则,注意
PT标志不可少:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] - 若项目部署在子目录(如
/myapp/),需加RewriteBase /myapp/
Nginx下推荐用if+rewrite方式
宝塔、phpStudy等面板用户优先选这个,兼容性好,不易出错。
- 编辑站点配置,在
server块内找到或新增location / { },替换为:
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /public/index.php?s=$1 last;
}
} - 关键点:
/public/index.php路径要写全,不能只写/index.php(TP6/8强制入口在public) - 确认
root指令指向public/目录,例如:root "/www/wwwroot/myapp/public"; - 改完务必执行
nginx -t && nginx -s reload,否则不生效
ThinkPHP框架内必须同步开启路由
服务器转发只是第一步,框架自己得“认路”。
- 打开
config/app.php,确保三项配置正确:'url_route_on' => true(路由开关必须开)'url_html_suffix' => ''(空字符串才能支持/user/list这类无后缀URL)'pathinfo_depr' => '/'(与Nginx规则中s=$1的斜杠分隔逻辑一致) - TP6/8默认启用路由,但检查
app/middleware.php是否误删了think\middleware\ParseUrl::class - TP5用户还需确认
'url_common' => false,避免走普通模式绕过PATH_INFO
常见问题排查要点
配完打不开?别急着重装,按顺序查这几点:
- 先测带
index.php的地址,如http://localhost/index.php/index/hello——能打开说明PHP和框架正常 - 再测伪静态地址
http://localhost/index/hello——404就回头检查Nginx是否重载、root是否指对public、.htaccess是否放对位置 - 页面空白(HTTP 200但无内容)?看Nginx错误日志,搜
Primary script unknown——90%是SCRIPT_FILENAME路径拼错了 - 宝塔用户慎用下拉菜单里的“ThinkPHP”模板,那是为TP5设计的,直接套用TP6/8必失败
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











