Eu tenho uma configuração de reescrita 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 se transforma index.php?id=something
em something
URLs limpos. Muito simples e funciona bem.
Como é comum nos CMSs, para impedir a quebra do back-end, cada subdiretório requer um <remove name="Clean URLs" />
ou <clear />
em seu web.config para que a regra não seja herdada.
Existe uma maneira de especificar na regra pai que ela não deve ser herdada por seus filhos, limitando de alguma forma o escopo da regra apenas ao diretório atual? Algo como <rule name="Clean URLs" stopProcessing="true" inherit="no">
seria épico.