thinkphp伪静态失效90%因路由未开启或规则错配:必须设置'url_route_on'=>true,nginx需用rewrite ^(.*)$ /index.php?s=$1 last;并置于if(!-e $request_filename)内,root须指向public目录。

腾讯云上 ThinkPHP 伪静态失效,90% 是因为没配对规则或没开路由,不是环境问题。
ThinkPHP 路由必须先开启,否则伪静态规则无效
伪静态本质是把请求转发给 index.php,但真正解析 URL 的是 ThinkPHP 自身的路由模块。如果 url_route_on 关闭(默认关闭),哪怕 Nginx/Apache 规则完全正确,也会 404 或跳首页。
- 检查
config/app.php(TP6)或config.php(TP5)中是否设置了'url_route_on' => true - TP6 还需确认
route/目录下有定义规则,空文件或未启用Route::get()等注册方式,照样不生效 - 开发时可临时加一行
dump(request()->url());看是否能拿到完整 pathinfo,若只输出/index.php,说明路由根本没进
Nginx 下伪静态规则不能直接套用 Apache 的 .htaccess
腾讯云轻量应用服务器、CVM 搭配宝塔或手动配置 Nginx 时,常见错误是把 Apache 的 RewriteRule ^(.*)$ index.php/ 直接照搬进 location / 块里——Nginx 不支持 PATH_INFO 写法,index.php/ 会被当成子路径,直接 404。
- 正确写法是用
?s=参数传递路由信息:rewrite ^(.*)$ /index.php?s=$1 last; - 必须加
last,不能用break(会导致子请求不重新匹配 location) - 务必包裹在
if (!-e $request_filename) { ... }条件内,否则静态资源(js/css/img)也会被重写 - 宝塔用户可在「网站 → 站点设置 → 伪静态」中直接选「ThinkPHP」,它内置的就是这个逻辑
腾讯云轻量/宝塔部署时,运行目录和入口文件位置容易错配
ThinkPHP 推荐将 public/ 设为 Web 根目录,但很多用户把整个项目放根目录,又没改 Nginx 的 root,结果 index.php 实际路径是 /public/index.php,而伪静态规则却指向 /index.php,自然找不到文件。
- 确认 Nginx 配置中
root指向的是/www/wwwroot/your-site/public(非项目根目录) - 检查
location ~ \.php$块里的fastcgi_param SCRIPT_FILENAME是否拼对了路径,常见错误是写成$document_root$fastcgi_script_name却没保证$document_root已指向 public - 如果必须把入口放在子目录(如
/blog/),规则要改成:rewrite ^/blog/(.*)$ /blog/index.php?s=/$1 last;,且root得对应到上层
IIS 和 web.config 的 rewrite 规则要配合 ThinkPHP 的兼容模式
腾讯云 Windows CVM 上用 IIS 托管 ThinkPHP,仅靠 web.config 里一个通配 rule 不够。IIS 默认不识别 ?s= 形式,且 PATH_INFO 在某些版本下为空。
- 推荐在
config/app.php中显式开启兼容模式:'url_common' => true(TP6)或'url_model' => 2(TP5) -
web.config的 rule 应使用match url="^(.*)$"+action type="Rewrite" url="index.php?s={R:1}",注意不是{R:0} - 确保 IIS 已安装 URL Rewrite Module,且站点权限允许读取
web.config - 若仍 500,查看 Windows 事件查看器,常因
index.php权限不足或 PHP 解析器未加载导致
最易忽略的一点:腾讯云轻量应用服务器默认关闭了 Nginx 的 try_files 支持,而部分用户误删了 if (!-e $request_filename) 改用 try_files $uri $uri/ /index.php?s=$uri;,这在腾讯云某些镜像里会触发空响应——老老实实用 if 判断更稳。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











