
本文介绍在 iis 中托管 asp.net 6 应用时,如何通过 web.config 配置排除 `/blog` 等子目录,使其绕过 aspnetcoremodulev2,转而由已注册的 php 处理器(如 fastcgi)接管请求。
在混合技术栈部署场景中(例如主站使用 ASP.NET 6,博客子目录使用 PHP),关键挑战在于 IIS 默认会将所有请求(包括子目录)统一交由 aspNetCore 处理器处理。若不显式干预,PHP 文件(如 /blog/index.php)将被 ASP.NET 拦截并返回 404 或错误响应。解决思路是:在 IIS 配置层面,针对特定路径移除 ASP.NET Core 处理器注册,从而让请求自然回落至其他匹配的 handler(如 PHP 的 PhpFastCgi)。
实现该目标最可靠、推荐的方式是利用 IIS 的
以下为完整、可直接使用的 web.config 示例(置于站点根目录):
✅ 关键说明与注意事项:
立即学习“PHP免费学习笔记(深入)”;
中的 path 值为相对 URL 路径(非物理路径),且不带前导 /;IIS 会自动匹配 /blog/xxx 所有子请求。 -
必须精确匹配 中定义的处理器名称(区分大小写),确保移除成功。可通过 IIS 管理器 → 站点 → “处理程序映射” 验证名称。 - 此配置要求 PHP 已在 IIS 中正确安装并配置为 FastCGI 应用池(推荐使用 PHP Manager for IIS 或手动注册 php-cgi.exe)。未配置 PHP handler 时,移除 aspNetCore 后请求将返回 HTTP 404 或 500 错误。
- 替代方案:在 /blog 目录下单独放置一个 web.config,仅包含
。但该方式在嵌套子应用或权限受限环境中可能受 allowOverride 策略影响,主配置中统一管理更可控。 - 修改后务必重启 IIS 应用池或执行 iisreset /noforce,确保配置生效。
通过以上配置,即可安全实现 ASP.NET 6 与 PHP 在同一 IIS 站点下的共存与路径级路由隔离,兼顾开发灵活性与生产稳定性。











