thinkphp在iis上无法运行主因是url重写未配置、fastcgi未启用或web.config位置/内容错误;需确保安装url rewrite模块、fastcgi映射指向php-cgi.exe、web.config置于根目录并含正确规则,同时开启“允许双重转义”及设置php.ini中cgi.fix_pathinfo=1。

ThinkPHP 在 IIS 上跑不起来,绝大多数情况不是框架问题,而是 URL 重写没配对、PHP 运行模式不匹配,或者 web.config 放错了位置。
为什么默认访问报 404 或直接下载 index.php
根本原因是 IIS 不认识 ThinkPHP 的 PATH_INFO 路由规则,也没启用 FastCGI 模块来执行 PHP。IIS 默认把 index.php/xxx 当作带路径的静态文件处理,而不是交给 PHP 解析。
- IIS 没安装或没启用
FastCGI模块(必须) - PHP 没配置为
cgi-fcgi模式(php -v输出里不能有cli字样主导,得看到cgi-fcgi) -
web.config文件没放在网站根目录(和index.php同级),或内容写错 - 应用池的 .NET CLR 版本选了
v4.0但“托管管道模式”设成了集成—— ThinkPHP 是纯 PHP 应用,这里必须选无托管代码
web.config 里 rewrite 规则怎么写才生效
ThinkPHP 5.1+ 默认用 PATH_INFO,IIS 需靠 web.config 把请求转发给 index.php,并保留原始路径。别抄网上过时的伪静态规则,尤其别用匹配 .php 后缀的写法——那会把所有 PHP 文件都重写,导致 phpinfo() 都打不开。
正确做法是只重写「非静态资源」请求:
<configuration><system.webserver><rewrite><rules><rule name="ThinkPHP" stopprocessing="true"><match url="^(.*)$"></match><condition logicalgrouping="MatchAll"><add input="{REQUEST_FILENAME}" matchtype="IsFile" negate="true"></add><add input="{REQUEST_FILENAME}" matchtype="IsDirectory" negate="true"></add></condition><action type="Rewrite" url="index.php/{R:1}"></action></rule></rules></rewrite></system.webserver></configuration>
-
stopProcessing="true"很关键,避免后续规则干扰 -
{R:1}是捕获的完整路径,ThinkPHP 内部靠$_SERVER['PATH_INFO']解析,所以url="index.php/{R:1}"必须带斜杠 - 如果用的是 ThinkPHP 6+ 并启用了
APP_URL或路由域名绑定,还要检查request组件是否从HTTP_X_REWRITE_URL取值(IIS 会把重写后的 URL 放在这里)
PHP-CGI 进程频繁退出或 500 错误
这通常不是权限问题,而是 FastCGI 设置太激进。IIS 默认对每个 PHP-CGI 进程限制 90 秒超时、最多处理 100 个请求,而 ThinkPHP 加载类库多、Composer 自动加载耗时略长,容易触发回收。
- 进 IIS 管理器 → 左侧选服务器 → “FastCGI 设置” → 找到你的
php-cgi.exe路径 → 右键“编辑” - 把
Activity Timeout (seconds)改成300 - 把
Request Timeout (seconds)改成300 - 把
Instance MaxRequests改成1000(别设 0,IIS 会当非法值处理) - 确保
php.ini里fastcgi.impersonate = 1(否则 IIS 用户身份无法透传,日志写入、上传临时目录会失败)
最易被忽略的一点:IIS 的「请求筛选」默认会拦截带 . 和 / 混合的 URL(比如 index.php/admin/user),必须手动在站点 → “请求筛选” → “URL” 选项卡里勾掉「允许双重转义」——否则哪怕 web.config 写对了,也会在进入 rewrite 前就被拦下,返回 404.11。这个开关藏得深,且没有明显报错提示。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











