Encontrou a resposta após 4,5 horas de pesquisa no Google!
Basicamente aproveitando
<location path="." inheritInChildApplications="false">
<system.webServer>
<!-- ... -->
</system.webServer>
</location>
Eu tenho uma configuração de reconfiguração de URL para URLs limpos em um CMS e meu web.config se parece com isso:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Clean URLs" stopProcessing="true">
<match url="^([^/]+)/?$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="?id={R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Basicamente, ele transforma index.php?id=something
em something
para URLs limpos. Muito simples e funciona bem.
Como é comum em CMSs, para evitar que o backend seja interrompido, cada subdiretório requer <remove name="Clean URLs" />
ou <clear />
em seu web.config, portanto, a regra não é herdada.
Existe uma maneira de especificar na regra pai que ela não deve ser herdada por seus filhos de alguma forma limitando o escopo da regra apenas ao diretório atual? Algo como <rule name="Clean URLs" stopProcessing="true" inherit="no">
seria épico.
Encontrou a resposta após 4,5 horas de pesquisa no Google!
Basicamente aproveitando
<location path="." inheritInChildApplications="false">
<system.webServer>
<!-- ... -->
</system.webServer>
</location>
Recentemente encontrei este problema, em uma situação semelhante. Mas a resposta do rjenkins parece causar problemas com aplicativos virtuais que dependiam da herança de configurações pai.
Se você souber o nome da regra de regravação, basta fazer isso:
<rewrite>
<rules>
<remove name="RewriteNameToDisable" />
</rules>
</rewrite>
Tags url rewrite iis iis-7 web.config