ThinkPHP6.0通过路由参数https()强制HTTPS,作用于单条或分组路由匹配阶段,不满足则跳过而非重定向;需配合强制路由模式及反向代理协议头透传使用。

ThinkPHP6.0 配置路由强制 HTTPS,核心是通过路由参数 https 限制请求协议,而不是全局重定向或服务器层配置。它作用于单条或批量路由规则,在匹配阶段检查当前请求是否为 HTTPS,不满足则跳过该路由,继续匹配后续规则(除非无其他匹配,最终返回 404 或 Miss 路由)。
单条路由启用 HTTPS 强制
在 route/app.php 中定义路由时,链式调用 https() 方法:
Route::get('api/user', 'api.User/getInfo')->https();Route::post('login', 'auth.Login/handle')->https();
这样写表示:只有当用户以 https:// 协议访问 /api/user 或 /login 时,该路由才生效;HTTP 请求会被直接忽略,不会进入对应控制器方法。
批量路由统一设置 HTTPS
若多个路由都需要 HTTPS,推荐用 option() 批量注入参数,避免重复调用:
立即学习“PHP免费学习笔记(深入)”;
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
Route::group('api', function () {<br> Route::get('user', 'api.User/getInfo');<br> Route::get('order', 'api.Order/list');<br>})->option(['https' => true]);
整个 api 分组下的所有子路由均强制 HTTPS。注意:分组本身不产生实际 URL 前缀,只是逻辑归类 + 参数继承。
配合强制路由模式使用更安全
开启强制路由(config/route.php 中设 'url_route_must' => true)后,所有请求必须命中某条路由规则,否则报错。此时搭配 HTTPS 参数,能确保敏感接口(如登录、支付、用户数据)无法被非加密协议访问,从框架层堵住 HTTP 兜底入口。
- 未开启强制路由时,HTTP 请求可能 fallback 到默认的 PATHINFO 模式(如
/index.php/controller/action),绕过 HTTPS 限制; - 开启后,只要没显式定义 HTTP 版本的同名路由,HTTP 请求就完全无法到达业务逻辑。
注意事项
该机制依赖 PHP 的 $_SERVER['HTTPS'] 或 $_SERVER['HTTP_X_FORWARDED_PROTO'] 判断,若项目部署在反向代理(如 Nginx、SLB)后,需确保代理正确透传协议头:
- Nginx 示例:
proxy_set_header X-Forwarded-Proto $scheme; - 同时在 TP6 中可补充兼容判断,例如在中间件里提前设置:
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] ?? '' === 'https') $_SERVER['HTTPS'] = 'on';
仅靠路由层 https() 不会自动跳转,如需 301 重定向,应由 Web 服务器(Nginx/Apache)或自定义中间件完成。


















