如何从 IIS 上的 ASP.NET 6 中排除特定文件夹并允许它由 PHP 处理程序处理?

How to exclude a particular folder from ASP.NET 6 on IIS and allow it to process by PHP handlers?

我可以将 ASP.NET 6 网络应用程序部署到 Windows 2019 服务器上的 IIS。 一切正常。

默认web.config生成并存在根目录中:

<system.webServer>
<handlers>
  <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\TestWebApp.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>

问题

我想要一个 /blog 文件夹,我想在那里部署一个 PHP 应用程序。 我如何向 IIS 解释不将这些请求传递给 AspNetCoreModuleV2 处理程序,而是将这些请求传递给 PHP 处理程序? (url 重写模块已经安装)

您可以在您的 webapp 站点下创建一个 Virtual Application

官方文档只有一段描述了这个虚拟应用程序。下面帖子里的回答很详细,对你有帮助。

Using ServerManager to create Application within Application

我给你的测试结果

本次在azure web app中测试,与IIS相同

我已结束使用 <location...> 元素并从博客路径中删除处理程序。

关键是删除博客子文件夹的处理程序,这可以通过 <remove> 完成。可以使用 <location...> 元素,或者将 web.config 放置到博客子文件夹,然后删除那里的处理程序。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath=".\TestWebApp.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    </system.webServer>
  </location>
  <location path="blog">
    <system.webServer>
      <handlers>
        <remove name="aspNetCore" />
      </handlers>
    </system.webServer>
  </location>
</configuration>