thinkphp 5.1.37 伪静态需三处协同:服务器规则(.htaccess须置于public目录、nginx需配置try_files及path_info)、框架路由开关(config/app.php中url_route_on=true、pathinfo_depr='/')、web服务器运行目录必须指向/public;任一缺失均导致404或重定向循环。

ThinkPHP 5.1.37 伪静态配置不是单点设置,而是三处必须协同:服务器规则文件(.htaccess 或 Nginx 配置)、框架路由开关(config/app.php)、以及 Web 服务器运行目录指向(public/)。漏掉任意一处,都会表现为“URL 去掉 index.php 后 404”或“重定向循环”。
Apache 下找 .htaccess:必须在 public/ 目录里
TP5.1+ 默认入口是 public/index.php,所以 .htaccess 文件不能放在项目根目录(含 application 的那层),必须放在 public/ 目录下。常见错误就是放错位置,导致规则完全不触发。
- 路径示例:
D:/www/myapp/public/.htaccess(Windows)或/var/www/myapp/public/.htaccess(Linux) - 内容必须用带
index.php?/$1的写法(注意问号):<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> - 若用 phpEnv 或宝塔,还需确认虚拟主机配置中对应
<directory></directory>块内有AllowOverride All
Nginx 下找配置:改的是站点 server 块,不是全局 nginx.conf
Nginx 不读 .htaccess,所有规则必须写进具体站点的 server 配置块里,路径通常为 /www/server/panel/vhost/nginx/yourdomain.conf(宝塔)或 /etc/nginx/conf.d/your-site.conf(手动部署)。
- 关键两处要同时存在:
—location / { try_files $uri $uri/ /public/index.php?$query_string; }
— 在location ~ \.php$块里必须有fastcgi_param PATH_INFO $fastcgi_path_info; - 缺
PATH_INFO这行,TP5.1 启动时会直接报 “URL pathinfo not supported”,而不是 404 - 宝塔用户别只粘贴规则就点保存——务必去「网站 → 设置 → 运行目录」选
/public,否则$_SERVER['DOCUMENT_ROOT']指向错误,runtime/写入失败,后续全挂
框架内找开关:看 config/app.php 里的三个配置项
服务器转发只是第一步,框架自己得“接得住”。TP5.1.37 默认开启路由,但以下三项一旦被注释、设为 false 或值不对,伪静态就失效:
-
'url_route_on' => true:必须为true,这是总开关 -
'url_common_param' => false:若设为true,会强制把参数拼成?id=1&name=test形式,破坏 PATH_INFO 解析逻辑 -
'pathinfo_depr' => '/':必须和服务器规则中使用的分隔符一致(比如index.php?/user/list中的/),不能是-或.
最容易被忽略的是:TP5.1.37 的 public/ 目录结构和 Web 服务器 root 必须严格对齐。哪怕只是少一个斜杠、多一层嵌套、或者 Linux 下大小写写成 Static/,静态资源 404 和路由 404 就会一起出现,而且很难定位到根源。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











