ThinkPHP6.0在IIS上实现伪静态,必须将web.config置于public目录、配置含{R:1}捕获和s=参数的重写规则、启用url_model=2的PATHINFO模式,并安装URL Rewrite Module 2.1。

ThinkPHP6.0 在 IIS 上实现伪静态,web.config 中的 <rewrite></rewrite> 节点必须精准匹配请求、明确转发到 public/index.php、并传入 s= 参数,缺一不可。规则写错或位置不对,都会导致 404 或白屏。
web.config 必须放在 public 目录下
不是项目根目录(含 application、public 文件夹的那个目录),而是 public/ 这个入口目录。IIS 站点的物理路径可设为项目根,但 web.config 必须在 public 内,且文件编码为 UTF-8 无 BOM。
标准 rewrite 规则内容(直接可用)
将以下 XML 复制保存为 web.config,放入 public/ 目录:
关键细节说明:
立即学习“PHP免费学习笔记(深入)”;
-
url="index.php?s={R:1}":必须指向public/下的index.php,不能写成../public/index.php或/public/index.php -
{R:1}是正则捕获的完整路径(如/user/login),会作为s参数值传给框架 -
appendQueryString="true":保留原始查询参数(例如?page=2&sort=id) - 两个
<conditions></conditions>条件:排除真实存在的文件(.js/.css/.png)和目录,避免静态资源被错误重写
部署前必须确认的三件事
- IIS 已安装 URL Rewrite Module 2.1+,并在“模块”列表中可见
UrlRewriteModule - IIS 应用池身份(如
IIS AppPool\YourApp)对public/目录有 读取 + 执行 权限 - ThinkPHP 配置已启用 PATHINFO 模式:
config/app.php中'url_model' => 2
子目录部署需额外调整
若网站访问地址是 https://example.com/shop/,则:
<match url="^shop/(.*)$"> —— 匹配带前缀的路径</match>-
url="index.php?s=/shop/{R:1}"——s参数值要与实际 URL 路径一致 - 同时确保
config/app.php中'app_host' => 'https://example.com'或启用自动识别



















