需将 url_html_suffix 配置设为空字符串 '' 或 false,修改 config/app.php 中对应项;同时清除 url() 的 suffix 参数及路由中硬编码的 .html,Web 服务器无需额外重写规则。

ThinkPHP5.0 默认开启伪静态,后缀设为 html,所以 URL 末尾会自动带上 .html。要去掉它,核心是关闭或清空伪静态后缀配置,而不是单纯改 Nginx/Apache 规则。
修改 url_html_suffix 配置项
在应用配置文件(如 config/app.php 或 application/config.php)中,找到并修改以下配置:
- 设为空字符串:
'url_html_suffix' => ''—— 表示支持任意后缀(包括无后缀),URL 如/index/blog/3可直接访问 - 设为
false:'url_html_suffix' => false—— 完全禁用伪静态,此时.html不再被识别为后缀,而会被当作参数值(例如/blog/3.html中的id=3.html) - 避免写成
'url_html_suffix' => 'html'—— 这正是默认行为,会强制追加.html
确认路由和 URL 生成逻辑
即使关闭了伪静态后缀,仍需注意两点:
- 使用
url()或\think\Url::build()生成链接时,若传入了suffix参数(如url('blog/read', ['id'=>3], true, '', '.html')),后缀仍会被加上;应统一去掉该参数或设为'' - 如果项目启用了路由规则(
route.php),检查是否在定义中硬编码了.html,例如Route::get('article/:id.html', 'index/article/read');—— 应改为Route::get('article/:id', 'index/article/read');
Web 服务器无需额外重写(但需确保基础伪静态已通)
去除 .html 后缀不依赖 .htaccess 或 nginx 的 rewrite 规则,前提是你的服务器已支持 ThinkPHP 的基础伪静态(即能正确解析 /index.php?s=/home/index 或 PATH_INFO 模式)。若尚未配置好基础伪静态,先确保以下任一方式可用:
立即学习“PHP免费学习笔记(深入)”;
- Apache:启用
mod_rewrite,根目录存在有效.htaccess - Nginx:server 块中已配置
try_files $uri $uri/ /index.php?$query_string;类似规则
验证是否生效
修改配置后,重启 Web 服务(尤其是 PHP-FPM 进程,因 ThinkPHP 配置常被缓存),然后测试:
- 直接访问
http://yourdomain.com/index/blog/3—— 应正常响应,不报 404 - 在控制器中调用
Request::instance()->ext()—— 返回空字符串'',说明后缀未被识别 - 查看页面内由
url()生成的链接 —— 不再含.html



















