Impedir que regras de reconfiguração de URL sejam herdadas por subdiretórios no IIS7

11

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=somethingem somethingURLs 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.

Rich Jenks
fonte

Respostas:

6

Recentemente, me deparei com esse problema, em uma situação semelhante. Mas a resposta de rjenkins parece causar problemas com aplicativos virtuais que dependem da herança das configurações pai.

Se você souber o nome da regra de reescrita, basta fazer o seguinte:

<rewrite>
  <rules>
    <remove name="RewriteNameToDisable" />
  </rules>
</rewrite>
Bryan Way
fonte
2
Essa foi a minha primeira tentativa, mas você deve colocar isso no web.config para todos os subdiretórios e isso nem sempre é prático. Eu concordo que é mais limpo, mas é mais trabalho, especialmente quando pode haver regravações em subdiretórios (por exemplo, outra instância do cms em uma subpasta)
Rico Jenks