thinkphp伪静态下__token__不从$_get自动校验,仅从$_post或显式传入数组读取;若伪静态规则漏写&$args或?$query_string,会导致__token__参数丢失,input('get.__token__')为空。

伪静态下 token 字段怎么进 $_GET
ThinkPHP5 的 token() 函数生成的隐藏字段(__token__)默认只参与表单提交校验,和 URL 路由无关;但如果你在伪静态 URL 里手动拼了 ?__token__=xxx,它不会自动进校验流程——因为框架只从 $_POST 或显式传入的数组里取 __token__,不从 $_GET 解析。
真正起作用的路径是:表单 POST → input('post.') 带上 __token__ → $this->validateToken() 校验。伪静态本身不改变这个链路。
- 不要试图把 token 塞进伪静态路由路径(如
/user/edit/1?__token__=xxx),框架不认这个位置 - 如果非要 GET 场景带 token(比如跳转前预埋),得手动传给控制器再塞进校验逻辑:
$this->validateToken(['__token__' => input('get.__token__')]) - 页面内多个表单共用一个 token 时,
token(true)可避免首次提交后失效,但需确保 session 未被覆盖
Nginx 伪静态会不会丢掉 __token__ 参数
会,但不是伪静态规则的问题,而是你漏写了 &$args 或 &$query_string。
比如这条常见错误配置:try_files $uri $uri/ /index.php?s=$uri; —— 它把原始查询参数(包括 ?__token__=xxx)全丢了,$_GET 里只剩 s,__token__ 彻底消失。
基于官方 GMGN API 的代币分析工具。通过合约地址查询代币在 SOL/BSC/Base 链上的准确市场数据、安全检测、KOL 分析、开发者分析和 AI 智能分析(叙事/筹码/老鼠仓/机器人)。支持自动识别链。
- 正确写法必须带参数透传:
try_files $uri $uri/ /index.php?s=$uri&$args;(Apache 风格)或/index.php?$query_string;(Nginx 原生) - 用
if (!-e $request_filename)写法时,rewrite后加[QSA]标志(Nginx 不支持,得靠&$args模拟) - 验证方法:在控制器里
dump(input('get.')),看__token__是否在输出里
为什么 validateToken() 总返回 false
伪静态环境下最常踩的坑不是规则写错,而是 token 生命周期和传递方式错位。
- session 过期或存储驱动切换(比如从 file 改成 Redis)后,
validateToken()查不到之前生成的值,直接 false - 前端 JS 提交时没把表单里的
__token__字段原样带上,或字段名写成_token、csrf_token等非标准名 - 同一页面两个表单共用一个
{:token()}输出,第二个提交时因 token 已被消耗而失败(ThinkPHP5 默认一次性) - 开了调试模式但没清浏览器缓存,旧页面的 token 还在 DOM 里,实际 session 已刷新
子目录部署时 token 和伪静态怎么协同
当项目在二级目录(如 /admin/)时,Nginx 的 location 和伪静态 fallback 路径必须对齐,否则 __token__ 可能根本到不了 PHP 层。
比如站点根目录是 /var/www/html,但 ThinkPHP 在 /var/www/html/admin,那么:
-
location /admin/ { try_files $uri $uri/ /admin/index.php?$query_string; }—— fallback 路径必须带/admin/前缀 - 入口文件
public/index.php要确保能被 Nginx 正确定位,不能依赖root /var/www/html;直接映射 - 如果用了宝塔,「网站目录」要设为
/var/www/html/admin,否则$query_string传过去但index.php找不到
少一个斜杠、多一个层级,__token__ 就卡在 Nginx 层进不来 —— 这类问题不会报错,只会静默失败。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










