ThinkPHP 8.0在IIS上实现伪静态的核心是配置web.config文件,将请求如/index/index重写至public/index.php/{R:1},需确保URL Rewrite Module已安装、web.config置于项目根目录(与public同级)、使用FastCGI运行PHP且框架启用url_convert。

ThinkPHP 8.0 在 IIS 上实现伪静态,核心是通过 web.config 文件配置 URL 重写规则,让访问如 /index/index 这样的路径能被正确转发到 index.php 入口文件处理。
基础 web.config 文件结构(推荐直接使用)
将以下内容保存为项目根目录下的 web.config(注意:不是 public 目录下,而是和 public 同级的根目录):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ThinkPHP_Rewrite" stopProcessing="true">
<match url="^(.*)$" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="public/index.php/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
关键点说明
-
入口路径要写对:ThinkPHP 8.0 默认采用
public/为 Web 根目录,所以重写目标是public/index.php/{R:1},不是index.php;如果把public设为了实际网站根目录,则需调整为index.php/{R:1} -
规则作用位置:
web.config必须放在网站绑定的物理路径根目录(即 IIS 站点“物理路径”指向的文件夹),通常就是 ThinkPHP 项目的最外层目录 - URL 重写模块必须启用:IIS 需安装并启用 URL Rewrite Module(可从 Microsoft 官网下载安装);未安装时会报 500 错误或直接忽略规则
- PHP 运行模式建议 FastCGI:确保 IIS 使用 FastCGI 方式运行 PHP,且 PHP 版本 ≥ 7.4(TP8 最低要求)
常见问题排查
-
404 或 500 错误:检查
web.config是否放错位置(应与public同级)、是否拼写错误、XML 格式是否合法(标签闭合、引号英文) -
样式/JS/CSS 404:说明静态资源也被重写了,可在
<rules></rules>内添加排除规则(例如跳过.css、.js、.png等后缀) -
PATH_INFO 不生效:确认
config/app.php中'url_convert' => true,且'var_pathinfo' => 's'(默认即可);TP8 默认兼容 PATH_INFO 和 QUERY_STRING 两种模式
补充:若 public 是实际网站根目录(不推荐但可行)
此时 web.config 放在 public/ 目录下,内容改为:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
<action type="Rewrite" url="index.php/{R:1}" />
同时确保 public/index.php 中的 __DIR__ . '/../vendor/autoload.php' 路径仍有效(可能需调整自动加载路径)。
立即学习“PHP免费学习笔记(深入)”;


















