伪静态规则由web服务器(apache/nginx)控制,非thinkphp配置文件编写;apache通过.htaccess实现,nginx需在server块中配置rewrite或try_files,框架仅负责解析重写后的url路由。

伪静态规则由 Web 服务器控制,不是 ThinkPHP 配置文件写的
ThinkPHP 5.0.17 本身不提供「伪静态规则」的配置入口,.htaccess 或 nginx.conf 才是生效位置。框架只负责识别重写后的 URL 并正确解析路由,比如把 /index/user/list 映射到 index/User/list 控制器方法。
常见错误是去翻 application/route.php 或 config.php 找“伪静态开关”——那里根本没有。路由配置管的是「怎么解析 URL」,不是「怎么重写 URL」。
Apache 下伪静态规则写在 .htaccess 文件里
确保项目根目录(和 public 同级或在 public 内)有启用的 .htaccess,内容通常如下:
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [L]
注意点:
-
RewriteRule中的index.php/$1是关键,TP5 默认依赖 PATH_INFO 模式;如果改成index.php?s=$1,就要同步改config.php里的'url_model' => 2 - Apache 必须开启
mod_rewrite,且AllowOverride All已在虚拟主机配置中启用 - Windows 下某些编辑器可能隐藏扩展名,确认文件名真是
.htaccess,不是.htaccess.txt
Nginx 下伪静态规则写在 server 块里
不能只复制 Apache 规则,Nginx 无 .htaccess 支持。需在站点配置的 server 段内加:
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
}
}
或者更稳妥的写法(推荐):
location / {
try_files $uri $uri/ /index.php?s=$uri&$args;
}
关键差异:
- Nginx 不支持
.htaccess,所有重写必须进主配置或include的 conf 文件 - TP5.0.17 默认用
PATH_INFO模式,但 Nginx 原生不传 PATH_INFO,所以普遍改用s=xxx参数方式,对应要设'url_model' => 2在config.php - 如果漏了
&$args,带查询参数的 URL(如/user?id=1)会丢失id
验证伪静态是否生效的三个信号
别只看首页能不能打开,重点检查:
- 访问
/index.php/user/index能打开,但/user/index404 → 说明服务器重写没配好 - 访问
/user/index能打开,但url()生成的链接仍是index.php/user/index→ 检查config.php中'url_route_must' => true和'url_html_suffix' => ''是否合理 - 开启调试模式后,
Route::rule()定义的路由能匹配/api/v1/users,但直接浏览器输这个路径 404 → 99% 是 Nginx/Apache 层未转发到index.php
最常被忽略的是:开发时本地用 PHP 内置服务器(php -S)跑,它根本不支持重写,此时任何伪静态配置都无效——必须换 Apache 或 Nginx 环境验证。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











